mck*_*imo 13 middleware node.js express passport.js
(我已经这样做了fbStrategy.passReqToCallback = true)我正在关注
https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together但是想要为多个应用程序使用这种社交认证服务,例如:控制它的那个加热系统,打开喷头等的系统
基本上,如果其中一个应用程序检查服务器并且没有正确的令牌,它将被重定向到此社会认证服务(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);
});
Run Code Online (Sandbox Code Playgroud)
req的req,res,next是序列化的用户记录.此时,社交认证并不知道用户是谁.
fbStrategy.passReqToCallback = true;
passport.use(new FacebookStrategy(fbStrategy,
function(req, token, refreshToken, profile, done) {
var email = (profile.emails[0].value || '').toLowerCase()
process.nextTick(function() {...
Run Code Online (Sandbox Code Playgroud)
一旦授权完成,我想重定向回调用应用程序,我需要参加这个:appId参数,所以我可以回到正确的网站.
现在一般情况下,如果我只是创建了一个变量,currentAppId可以访问各种社交状态,但如果您碰巧有多个人同时进行身份验证,那么您可能会让用户返回错误的应用程序,或其他一些用户应用程序.这就是为什么我需要appId作为param旅行passport.authenticate.我应该在哪里找出方法.我能包装passport.authenticate或以其他方式修改东西吗?
Man*_*ner 12
您可以使用请求本身从策略功能传输一些其他参数.在下面的例子中的两个参数_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() {...
Run Code Online (Sandbox Code Playgroud)
如果您需要存储id以进一步请求,您可以使用当前请求的套接字作为键的映射.