在passport.js中为OAuth策略动态指定重定向url的最佳方法是什么?
我已按passportjs文档设置facebook身份验证:在passport.js中为OAuth策略动态指定重定向url的最佳方法是什么?,oauth,passport.js,Oauth,Passport.js,我已按passportjs文档设置facebook身份验证: var passport = require('passport') , FacebookStrategy = require('passport-facebook').Strategy; passport.use(new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL
var passport = require('passport')
, FacebookStrategy = require('passport-facebook').Strategy;
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://www.example.com/facebook/callback"
},
function(accessToken, refreshToken, profile, done) { ... });
}
));
app.get('/login/facebook', passport.authenticate('facebook'))
.get('/facebook/callback', passport.authenticate('facebook', {successRedirect: '/', failureRedirect: '/login'}));
这一切都很好。但是,在某些情况下(例如令牌过期),我希望在启动登录请求之前自动将用户重定向到用户所在的页面。因此,我尝试通过登录请求(从客户端到服务器,再到facebook,再回到facebook)找到一个查询字符串param。但是我看不到在callbackURL中指定的方法
此外,当我尝试将一些上下文参数编码到config callbackURL(例如:“”)时,我得到了一个OAuth解析错误。有趣的是,Facebook确实正确地响应了访问代码和redir参数,但失败的原因是OAUTH异常:
FacebookTokenError: Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request
at Strategy.parseErrorResponse (C:\Sources\node_modules\passport-facebook\lib\strategy.js:198:12)
at Strategy.OAuth2Strategy._createOAuthError (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:345:16)
at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:171:43
at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:177:18
at passBackControl (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9)
at IncomingMessage.<anonymous> (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:943:16
at process._tickCallback (node.js:419:13)
FacebookTokenError:验证验证代码时出错。请确保重定向uri与OAuth对话框请求中使用的uri相同
在Strategy.parseErrorResponse(C:\Sources\node\u modules\passport facebook\lib\Strategy.js:198:12)
在Strategy.OAuth2Strategy.\u创建OAutherror(C:\Sources\node\u modules\passport facebook\node\u modules\passport-oauth2\lib\Strategy.js:345:16)
在C:\Sources\node\u modules\passport facebook\node\u modules\passport-oauth2\lib\strategy.js:171:43
在C:\Sources\node\u modules\passport facebook\node\u modules\passport-oauth2\node\u modules\oauth\lib\oauth2.js:177:18
在passBackControl(C:\Sources\node\u modules\passport facebook\node\u modules\passport-oauth2\node\u modules\oauth\lib\oauth2.js:124:9)
在收到消息时。(C:\Sources\node\u modules\passport facebook\node\u modules\passport-oauth2\node\u modules\oauth\lib\oauth2.js:143:7)
在IncomingMessage.emit(events.js:117:20)
在_stream_readable.js:943:16
在进程中调用(node.js:419:13)
注意,我以前使用WIF工作过。我认为通过OAuth进程传递额外的查询字符串参数没有任何安全问题
你知道我该如何克服这一点吗?我不知道该如何满足你的要求,但为了实现你想要的最终目标,你可以:
这不是很容易吗?在我的场景中,将状态保存在cookie中是有问题的,原因有很多。在任何情况下,我发现这可以通过使用策略的状态参数来实现。