のためにコールバックでres.redirect('back');
を試してみてください、私はGoogleStrategyが非常に類似していることを確信しています。こののバリエーションを試してみてください。
app.get('/auth/twitter/callback',
passport.authenticate('twitter', {
successRedirect: authenticationRedirect(req, '/account')
, failureRedirect: '/'
})
);
ただ、これにそのブロックを変更します:
app.get('/auth/twitter/callback', function(req, res, next){
passport.authenticate('twitter', function(err, user, info){
// This is the default destination upon successful login.
var redirectUrl = '/account';
if (err) { return next(err); }
if (!user) { return res.redirect('/'); }
// If we have previously stored a redirectUrl, use that,
// otherwise, use the default.
if (req.session.redirectUrl) {
redirectUrl = req.session.redirectUrl;
req.session.redirectUrl = null;
}
req.logIn(user, function(err){
if (err) { return next(err); }
});
res.redirect(redirectUrl);
})(req, res, next);
});
あなたがそう(パスポートガイドから)のような認証サービスからのコールバックのためのルートを定義していると仮定すると、
さて、このようにセッションでは、元のURLを保存するために認証されたルートのミドルウェアを定義します。
ensureAuthenticated = function (req, res, next) {
if (req.isAuthenticated()) { return next(); }
// If the user is not authenticated, then we will start the authentication
// process. Before we do, let's store this originally requested URL in the
// session so we know where to return the user later.
req.session.redirectUrl = req.url;
// Resume normal authentication...
logger.info('User is not authenticated.');
req.flash("warn", "You must be logged-in to do that.");
res.redirect('/');
}
作品!
これは完全に動作しますが、リダイレクト時にユーザーが認証されて戻ってくると、ハッシュパラメータが不足しているように見えます。ログイン後にリダイレクトするときにURLにそれらを保持する方法がありますか? http://stackoverflow.com/questions/14124932/passport-js-express-js-forward-user-to-original-destination-after-authenticati – prototype
@ user645715おそらく、 'req.session.redirectUrl = req.originalUrl ; '代わりにまたは' req.url' –
は魅力のように動作します、ありがとう:) – Zub