我已根据passportjs docs设置了我的facebook身份验证:
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'}));
Run Code Online (Sandbox Code Playgroud)
这一切都很好.但是,当我想在启动登录请求之前自动将用户重定向到用户所在的页面时,有些情况(例如令牌过期).所以我尝试通过登录请求(从客户端到服务器到Facebook并返回)检查查询字符串参数.但是我无法在callbackURL中看到指定它的方法.
此外,当我尝试将一些上下文参数硬编码到config callbackURL(例如:" http://www.example.com/facebook/callback?redir=lastUserPage ")时,我得到一个OAuth解析错误.有趣的是,Facebook确实对访问代码以及redir param做出了正确的响应,但它在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)
Run Code Online (Sandbox Code Playgroud)
请注意,之前我使用过WIF.通过OAuth流程传递其他查询字符串参数,我没有看到任何安全问题.
知道如何通过这个吗?
我不确定如何做您所要求的事情,但为了您想要的最终目标,您可以:
这不是同样容易吗?