2016-06-28 7 views
1

私はこの回答を他の場所で見てきましたが、何も見つかりませんでした。パスポート設定セッションオプション?

設定に関するパスポートのドキュメント:http://passportjs.org/docs/configureは、「セッション」部分がオプションであることを意味します。

If your application uses persistent login sessions, passport.session() middleware must also be used.

は、私が最も現実世界のアプリケーションでは、永続的なセッションを必要とする知っているが、学習目的のために、私はこれをインクリメンタルに構築し、したいしようとしています:永続的なログインセッションを参照するとき以降のドキュメントで、それはまた、このことを意味しますログイン作業をして、パスポートなしで成功ページにリダイレクトして自分のユーザーをシリアル化しようとしています。

現在、私は悪いパスワードと悪いユーザー名の両方を正しく失敗ページにリダイレクトしています。私は良い資格情報を入力し、dbのユーザーを見つけると、私は成功のページにリダイレクトしません。代わりに、私は次のエラーを取得する:

Error: Failed to serialize user into session 

私は、次の追加知っている問題を解決します:

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

私は私のユーザーをシリアル化しないようにパスポートを設定するにはどうすればよいですか?これも可能ですか?

+0

セッションを使用するだけで、文字通りそれを動作させるには数行のコードしかありません。あなたは明示的なセッションパッケージ 'npm install express-session'をインストールし、それを必要とする前にそれをインストールする必要があります(' 'app.use(' 'session(...))' 'と' 'app.use(passport.session 'var session = require( 'express-session')'を使用してください。それでおしまい。 – Molda

+0

@Molda認証状態を追跡する別の方法(JWTを使う方法、ブラウザで消費されないWebアプリケーションを実装する方法など)を好む人もいるので、それは有効な質問です。 – robertklep

+0

@robertklep私は全く同意します。しかし、** "学習目的のために**" **私はそれが働くために、それが最も簡単で最も速い方法だと思った、私は間違いなく最高のソリューションとしてそれをお勧めしようとしなかった。私はJWTを自分で使います。 – Molda

答えて

0

passport.authenticate()の呼び出しで明示的にdisable session supportを指定しないと、このエラーが発生します。

+0

あなたが提供したリンクは、後続のリクエストでの認証に永続セッションの使用を無効にし、代わりに発信者に常に基本認証資格情報 私の質問は、セッションセットアップのログインと作成中のエラーを指します。 –

+0

@MillieWalsh正しいこと、はい、それは[Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication)には縛られていませんが。また、認証の「成功」ハンドラが、後続のリクエストに渡す必要のあるトークンを設定または返すこともあります(カスタムミドルウェアと組み合わせてその有効性をチェックします) – robertklep