2012-05-06 20 views
7

私の主なアプリはDjangoアプリですが、リアルタイムのものはNode/Socket.IOを使いたいです。私はRedisを使用してDjangoからNodeにpub/subを行っています(そして様々なクライアントに)。難しい部分は、Djangoの認証に対してNodeユーザーを認証する方法です。私のノードのアプリでノードアプリケーションでDjango認証を使用してユーザーを認証するにはどうすればよいですか?

、私が持っている:

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でバックアップされていますので、私はそこを通過できます。それについてもっと良い方法があるかどうか不思議です。

答えて

4

Django側では、REST APIを公開します。その後、Node.jsの上で、あなたが必要な情報をいくつかのJSONを返すでしょう

http://yourdjangoserver.com/authenticate

にPOSTのユーザー名/パスワードのようなものを行うことができます。 APIを公開検査から保護したい場合は、非公開にするか基本認証のような方法で保護します。

restifyはnpmパッケージであり、Node.js側でREST APIを使用するのが非常に簡単です。このアーキテクチャの良い点は、それが疎結合していることです。あなたはDjangoを何かで置き換えることができ、クライアントは決して知りません。

+2

これです。私は、私のDjangoユーザープロファイルモデルで、キーをランダムに生成して、 'api key'フィールドを作成します。次に、そのキーを取得し、有効なユーザーに属しているかどうかを判断する単純なHTTPエンドポイント/ APIを使用できます。 – maroonmed

+0

node.jsがブロックされませんか?その場合、node.jsの使用は何ですか? –

+0

Node.jsをブロックする理由がわかりません – deltanovember

2

すでにレディスサーバーがあるので、ログインしたユーザーごとに(username, sessionkey)のペアを保存できます。オプションとして、セッション設定に対応するTTL値を使用できます。

次に、ユーザーがチャンネルの購読をリクエストするたびに、彼は自分のユーザー名を送信します。ユーザー名はその後、redisデータストアに対してチェックされます。

+1

私はこれを好きです。 – emostafa

関連する問題