gpt4 book ai didi

node.js - Node.js Passport 的 Google 策略上的自定义 returnUrl

转载 作者:IT老高 更新时间:2023-10-28 22:09:25 25 4
gpt4 key购买 nike

我正在使用 Express 和 Passport OpenID Google 策略,我想在每个身份验证请求上设置 returnURL,以便能够返回到启动该身份验证的页面。

情况是我有带有 Node.js 后端的 HTML5 幻灯片应用程序(以及社交内容和编辑器以及门户和扩展... https://github.com/bubersson/humla),我希望能够在某些幻灯片上登录用户(通过幻灯片menu...) 但我希望他能轻松回到同一张幻灯片。

所以我需要这样的东西?

app.get('/auth/google', function(req,res) {
var cust = "http://localhost:1338/"+req.params.xxx;
passport.authenticate('google', returnURL:cust, function ...
}

我已阅读 Passport 的指南,但仍然不知道该怎么做。我知道这不安全,但我还能怎么做呢?

或者我怎样才能让应用程序返回到启动登录的页面?或者有没有办法使用 AJAX 进行 OpenID 身份验证(并且仍然可以使用 Passport )?

最佳答案

我已经为我的应用程序 Twitter 身份验证解决了这个问题,我确信 GoogleStrategy 非常相似。试试这个的变体:

假设您已经像这样定义了来自身份验证服务的回调路由(来自 Passport 指南):

app.get('/auth/twitter/callback',
passport.authenticate('twitter', {
successRedirect: authenticationRedirect(req, '/account')
, failureRedirect: '/'
})
);

只需将该 block 更改为:

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 存储在 session 中,如下所示:

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('/');
}

有效!

关于node.js - Node.js Passport 的 Google 策略上的自定义 returnUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9885711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com