gpt4 book ai didi

node.js - 如何将附加参数传递给 passport.authenticate

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

(我已经做了 fbStrategy.passReqToCallback = true )我在胡说八道 https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together但想将此社交身份验证服务用于多个应用程序,例如:控制供暖系统的应用程序、打开洒水器的应用程序等。

基本上,如果这些应用程序之一与服务器进行检查并且没有正确的 token ,它会被重定向到此社交身份验证服务 (social-auth)。当用户按下社交登录按钮时,它会获取来自哪个应用程序的参数并将其添加为 /auth/facebook/:appid

的参数
    // send to facebook to do the authentication
app.get('/auth/facebook/:appId', function(req,res,next){
passport.authenticate(
'facebook', { scope : 'email' }
)(req,res,next);
});
req,res,next

req是序列化的用户记录。此时,social-auth 不知道用户是谁。

fbStrategy.passReqToCallback = true;  
passport.use(new FacebookStrategy(fbStrategy,
function(req, token, refreshToken, profile, done) {
var email = (profile.emails[0].value || '').toLowerCase()
process.nextTick(function() {...

授权完成后,我想重定向回调用应用程序,我需要 :appId 参数,以便我可以返回正确的站点。

现在,如果我只是让各种社会状态可以访问像 currentAppId 这样的变量,通常它会起作用,但是如果你碰巧有多个人同时进行身份验证,那么你可以想象有一个用户返回错误的应用程序,或其他一些用户的应用程序。这就是为什么我需要 appId 作为参数前往 passport.authenticate 。我应该去哪里弄清楚如何。我可以包装 passport.authenticate 或以其他方式修改内容吗?

最佳答案

您可以使用请求本身在策略函数之间传输一些附加参数。在以下示例中,两个参数 _toParam_fromParam 用于此问题。

app.get('/auth/facebook/:appId', function(req,res,next){
req._toParam = 'Hello';
passport.authenticate(
'facebook', { scope : 'email' }
)(req,res,next);
})


fbStrategy.passReqToCallback = true;
passport.use(new FacebookStrategy(fbStrategy,
function(req, token, refreshToken, profile, done) {
console.log(req._toParam);
req._fromParam = 'Hello 2';
var email = (profile.emails[0].value || '').toLowerCase()
process.nextTick(function() {...

如果您需要为进一步的请求存储 id,您可以使用当前请求的套接字作为键的映射。

关于node.js - 如何将附加参数传递给 passport.authenticate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43265992/

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