如何使用Django身份validation在Node应用程序中对用户进行身份validation?

我的主要应用程序是一个Django应用程序,但是,对于一些实时的东西,我想使用Node / Socket.IO。 我使用Redis做一些从Django到Node的pub / sub(然后到各种客户端)。 棘手的部分是我如何对Django身份validation的Node用户进行身份validation?

在我的Node应用程序中,我有:

io.on('connection', function (socket) { const subscribe = redis.createClient(); var userId = authenticateAndGetUserId(); subscribe.subscribe(userId + ':feed-items'); subscribe.on('message', function (channel, message) { socket.emit('feed-items', JSON.parse(message)); }); }); 

所以我的问题是什么是实施authenticateAndGetUserId好策略? 会话由MySQL支持,所以我可以在那里通过。 只是好奇,如果有更好的办法去做。

在Django方面,我会公开一个REST API。 然后在Node.js上,你可以做一些像POST用户名/密码

http://yourdjangoserver.com/authenticate

这将返回一些JSON与你需要的信息。 如果您希望保护API免受公众监督,那么请将其设为私有或使用基本身份validation等方式加以保护。

restify是一个npm包,它使得在Node.js端使用REST API非常容易。 这个架构的好处是它是松耦合的。 你可以用任何东西代替Django,客户永远不会知道。

既然你已经有了一个redis服务器,你可以为每一个login的用户存储(username, sessionkey)对,可选地,TTL值对应于你的会话设置。

然后,每当用户请求订阅某个频道时,他都会发送他的用户名,然后再对照redis数据存储进行检查。