node.jsとexpressには、セッションデータを取得する方法を示す多くの例があります。
3番目のリンクにアクセスするとわかるように、これはStackOverflowへのリンクです。良い答えがありましたが、@ UpTheCreekによるコメントで指摘されているように、connectにはparseCookieメソッドがありません。私もこの問題に遭遇しました。parseCookie
私が見つけたすべてのチュートリアルは、現在は存在しないconnectのメソッドを使用しています。そこで、セッションデータを取得する方法を尋ねたところ、彼は最善のアプローチがわからないと言ったので、ここに質問を投稿すると思いました。express@3.0.0rc4
、、、socket.io
およびを使用redis
する場合、セッションデータを取得し、それを使用してユーザーを承認するにはどうすればよいですか?使用することはできましたが、使用するrequire('connect').utils.parseSignedCookie;
と、ハンドシェイク時に常に警告/エラーが発生します。
warn - handshake error Error
そして私が読んだことから、それはとにかく恒久的な解決策ではないように思えます。
アップデート
わかりsession.socket.io
ました。サーバーで作業しました。そして、私が疑ったように、私は承認の時点で立ち往生しました。私はこれを間違った方向に進めているのではないかと思うので、遠慮なく訂正してください。私のRedisデータベースには、ユーザーの情報があります。初めてログインするときは、ユーザー情報が含まれるようにCookieを更新したいと思います。次に、彼らがサイトに戻ってきたときに、彼らがCookieを持っているかどうか、そしてユーザー情報がそこにあるかどうかを確認したいと思います。そこにない場合は、ログイン画面に送信したいと思います。ログイン画面で、ユーザーが情報を送信すると、Redisデータベースに対してその情報をテストし、一致する場合は、ユーザー情報でCookieを更新します。私の質問は次のとおりです。
1)RedisStoreを介してCookieを更新/変更するにはどうすればよいですか?
2)セッションデータはCookieにのみ保存されているようです。誰かがCookieをオフにしている場合、ページ間でユーザー情報を追跡するにはどうすればよいですか?
これが私の適用可能なコードです:
//...hiding unapplicable code...
var redis = require('socket.io/node_modules/redis');
var client = redis.createClient();
var RedisStore = require('connect-redis')(express);
var redis_store = new RedisStore();
var cookieParser = express.cookieParser('secret');
app.configure(function(){
//...hiding unapplicable code...
app.use(cookieParser);
app.use(express.session({secret: 'secret', store: redis_store}));
});
//...hiding code that starts the server and socket.io
var SessionSockets = require('session.socket.io');
var ssockets = new SessionSockets(io, redis_store, cookieParser);
io.configure(function(){
io.set('authorization', function(handshake, callback){
if(handshake.headers.cookie){
//var cookie = parseCookie(handshake.headers.cookie);
//if(cookie.user){
// handshake.user = cookie.user;
//}
}
callback(null, true);
});
});
ssockets.on('connection', function(err, socket, session){ ... });