ユーザーの認証に失敗しているときに、passport.socketio がこのエラーをスローします。
エラー: エラー: セッションからユーザーをデシリアライズできませんでした
問題を Passport.socketio に絞り込みました/lib/index.js
。
59行目
auth.passport.deserializeUser(userKey, function(err, user) {
if (err)
return auth.fail(data, err, true, accept);
...
そのエラーがスローされます。デバッガーuserKey
は有効であることを通知し、ユーザーを逆シリアル化する必要があります。これは、メイン アプリのパスポートがユーザーを逆シリアル化するために使用するのと同じキーです。(mongoDB オブジェクトの ID です)。私のメインアプリのパスポートは、ユーザーの逆シリアル化に問題はありません。(詳細) なぜこれでもエラーがスローされるのかわかりません。
ここuserKey
で渡されるのは、メインのアプリで逆シリアル化に使用するのと同じキー パスポートです。
userKey
グローバルを作成してメインコードに入れるところまで行きました
passport.deserializeUser(global.userKey, function(err, user) {
if (err)
return auth.fail(data, err, true, accept);
console.log('ok');
その結果、無限ループが発生します (外側のpassport.deserialize内にあるため)が、iutは「ok」を出力するため、メインアプリのパスポートは、少なくともindex.jsのパスポートと同じものを使用して問題なくデシリアライズできます(passport.socketio\lib\ index.js) できません! .. 何らかの理由で。
次に、メインアプリからパスポートオブジェクト自体を渡そうとしました
io.set('authorization', require('passport.socketio').authorize({
passport: passport,
...
実際にはエラーは発生しません!! socket.handshake
しかし、私はオブジェクトを取得しません。
これをさらに診断するアイデアがありません。何か助けていただければ幸いです。
が「セッションからユーザーを逆シリアル化」しないpassport.socketio
原因は何ですか?passport