2016-06-30 3 views
2

req.user発信元機能を除くどこにもアクセスできません。Express.jsのPassport.jsのreq.userにアクセスできません

私は、パスポートが認証後にすべてのリクエストにユーザーを添付することを読んだ。

ログインページをスキップして、ユーザーが内部ページにアクセスできないようにするか、セッションが既にアクティブな場合は、ユーザーページにリダイレクトする必要があります。この2つのことは、すべてのミドルウェアでreq.userにアクセスできる場合にのみ実行できます。

app.js link

app.js: -

app.post('/',passport.authenticate('local',{failureRedirect: '/'}), 
function(req,res,next){ 
console.log(req.user); //req.user defined here only not in users.js 
res.redirect('/users'); 
}); 

users.js: -

router.get('/users', function(req, res, next) { 
console.log(req.user);//undefined  
res.render('users'); 
}); 

DeserializeUser: -

passport.deserializeUser(function(id, done) { 
db.findById(id, function(err, user) { 
done(err, user); 
console.log(user) //undefined 
}); 
}); 

答えて

5

アプリがセッションをサポートするように設定されていないと思われます。一般に、ユーザーがログインしていることを「記憶」するために必要なものです。req.user

Expressの最も一般的なセッションミドルウェアはexpress-sessionで、設定が比較的簡単です。クイックチェックのために

が、これは問題がある場合は、アプリに以下を追加することができます参照します

app.use(session({ secret: 'super secret' })); 

あなたがapp.use(passport.session())を追加していることを確認します。

これが機能する場合は、セッションストアの設定方法と、セッションミドルウェアのさまざまなオプションについて説明します。

+0

それは追加されましたが、動作しません。 – Red

+0

正確に動作しないものは、 'req.user'は定義されていませんか?ユーザーがあなたの質問にログインしているかどうかを判断するために使用しているミドルウェアを追加できますか? – robertklep

+0

はいreq.userはルートに定義されていません。質問にスニペットを追加しました。 – Red

0

これとミドルウェアの機能を作成します。 passport.authenticate('local',{failureRedirect: '/'})をコンテンツとして使用し、認証するすべてのルートで使用します。またはapp.use(that_function)で使用してアプリ全体を認証する

+0

しかし、これは毎回ユーザー名のパスワード認証をトリガーします。すでにユーザーを認証している場合は、req.userを使用してこれをルートでのみ確認する必要があります。 – Red

+0

ログイン用にセッションを設定していない場合。この定型文を使用して['https://github.com/meanjs/mean/tree/v0.3.3'](https://github.com/meanjs/mean/tree/v0.3.3) PSを確認してください:check 0.3バージョンのみ。設定と戦略のpassport.jsを理解するのに役立ちます –

+0

ミドルウェアが追加されましたが、req.user = nullが追加されました。少なくとも少し進歩。 – Red

関連する問題