小编典典

可以动态构造facebook-pasport的回调吗?

node.js

使用facebook-passport时,通常要做的是redirect_uri在您使用的FacebookStrategy的构造函数中指定,如下所示:

passport.use("facebook", new FacebookStrategy({
    //TODO: Correctly configure me
    clientID: "XXXXXXX"
  , clientSecret: "XXXXXXXXX"
  , callbackURL: "http://localhost:3007/auth/facebook/callback"
  },
  function(accessToken,refreshToken,profile,done) {
    User.findByFacebookId(profile.id, function(err,user) {
      if(err){ return done(err);}
      if(!user){ return done(null,false)}
      return done(null, user);
    });
  })
);

然后,您将设置如下路线:

app.get('/auth/facebook/login', passport.authenticate('facebook') );
app.get('/auth/facebook/login_callback', passport.authenticate('facebook', {
    successRedirect:"/login_ok.html"
  , failureRedirect:"/login_failed.html"
  }
))

是否可以更改回调URL,使其包含传递给初始登录调用的参数信息?

注意:这个问题更多的是为了保存信息,这些信息花了我一些时间来解决,以避免其他人走同样的路。


阅读 284

收藏
2020-07-07

共1个答案

小编典典

我使用此处https://github.com/jaredhanson/passport-
facebook/issues/2上找到的一些信息并通过挖掘护照oauth2组件确定回叫uri的方式以及有关护照自定义回叫的信息找到了答案。此页面http://passportjs.org/guide/authenticate/

这是一个映射调用/auth/facebook/login/1234以使用回调的示例/auth/facebook/login_callback/1234

app.get('/auth/facebook/login/:id', function(req,res,next) {
  passport.authenticate(
    'facebook', 
     {callbackURL: '/auth/facebook/login_callback/'+req.params.id }
  )(req,res,next);
});

app.get('/auth/facebook/login_callback/:id', function(req,res,next) {
  passport.authenticate(
    'facebook',
     {
       callbackURL:"/auth/facebook/login_callback/"+req.params.id
     , successRedirect:"/login_ok.html"
     , failureRedirect:"/login_failed.html"
     }
   ) (req,res,next);
 });
2020-07-07