在passport.js中动态指定OAuth策略的重定向网址的最佳方法是什么?

Alp*_*ani 6 oauth passport.js

我已根据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流程传递其他查询字符串参数,我没有看到任何安全问题.

知道如何通过这个吗?

d-_*_*_-b 0

我不确定如何做您所要求的事情,但为了您想要的最终目标,您可以:

  1. 在验证之前保存 cookie
  2. 验证用户身份
  3. 在生成的回调页面上,检查 cookie 并重定向(如果存在)。

这不是同样容易吗?