2016-04-20 17 views
2

Passportを使用してExpressアプリケーションをセットアップしました。新しいユーザーがサインアップすると、電子メールの確認をしたいと思います。したがって、ユーザーが資格情報を投稿した後、/ signupルートが要求を取得し、成功すると検証のために/ sendmailにリダイレクトされます。期限切れのルート/セッションをExpressで処理するにはどうすればよいですか?

app.post('/signup', passport.authenticate('local-signup', { 
    successRedirect : '/sendmail', 
    failureRedirect : '/signup' 
})); 

また、/ signupルート内で、不正なセッションを防止するために、ユーザーはログアウトされ、セッションは破棄されます。

app.get('/sendmail', function(req, res) { 
    res.render('mailsent.ejs', { 
     message: 'An email with verification link has been sent to ' + req.user.email + '. Please follow the link in your mail to verify your account before logging in.' 
    }); 
    /* From keeping user authenticated after signup (not verfied yet)*/ 
    req.logOut(); 
    req.session.destroy(); 
    } 
}); 

セッションがすでに破棄されたとして、エンドユーザがブラウザを更新するか、直接/ sendmailのルートにアクセスしたときに私の質問は、ブラウザが戻って何も取得されません。これを防ぐ方法。つまり、app.get( '/ sendmail')のルートでは、セッションが有効かどうか(有効なreqオブジェクト)、どうすれば '/'にリダイレクトされるのかを確認できます。

app.use('/sendmail', function(req, res, next) { // Middleware for only the `/sendmail` route 
    if (req.session.authenticated) { 
     next(); 
    } else { 
     res.redirect("/"); 
    } 
}); 

するか、ちょうどあなたのルートにそれを置く:

答えて

1

あなたはそうのようなミドルウェアのルートを使用するか、ここで

app.get('/sendmail', function(req, res) { 
    if (!req.session.authenticated) { 
     return res.redirect("/"); // Redirect to home page if not authenticated 
    } 
    res.render('mailsent.ejs', { 
     message: 'An email with verification link has been sent to ' + req.user.email + '. Please follow the link in your mail to verify your account before logging in.' 
    }); 
    /* From keeping user authenticated after signup (not verfied yet)*/ 
    req.logOut(); 
    req.session.destroy(); 
    } 
}); 
+0

、req.session.authenticatedは「/ sendmailの定義されていませんので、 '/'にリダイレクトする – thethakuri

+0

これは単なる例であり、認証するかどうかを決めるためにセッション変数を設定する必要があります。必要であれば 'req.session.authenticated'を' req.session.email'に置き換えます。認証時に設定する必要があるものは – Datsik

+0

'req.session'は常にfalseを返します。しかし、 'req.user'が私のために働いていました。私は平均スタックをテストしていますが、これまでのところ私はそれが好きです。ありがとう。 – thethakuri

関連する問題