跨路由传递github回调函数获取的accessToken

问题描述 投票:0回答:1

我有三个文件,

  1. Auth.js
passport.use(new GitHubStrategy({
    clientID: GITHUB_CLIENT_ID,
    clientSecret: GITHUB_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/github/callback",
    passReqToCallback: true,
  },
  function(req, accessToken, refreshToken, profile, done) {
    req.session.accessToken = accessToken;
}));
  1. App.js
app.use(session({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));
app.use(passport.session());
app.use("/auth", authRoute);
app.use("/repo", repoRoute);
  1. Repo.js

    现在,我想像这样在 repo.js 中使用 request.session.accessToken 对象

router.get('/abc', async function(req, res){
    req.session.accessToken; <- this is undefined for me

我有一个前端服务器在响应,我为所有请求都包含了

credentials: true
,但我仍然得到一个未定义的 req.session.accessToken 值。

node.js session cookies passport.js github-api
1个回答
0
投票

你变得不确定,因为 Github 回调函数只接受 4 个参数,并且参数中没有 req 对象。你可以做这样的事情。

function(accessToken, refreshToken, profile, done) {
    process.nextTick(function () {
    
    /* if profile does not have accessToken you can do like this
     *    profile.accessToken = accessToken
     */
     
      return done(null, profile);
    }
});


// Now this access token is available in req.user and you can store it to session like this 

app.get('/login', function(req, res, next){

  // regenerate session and add token
  
    req.session.regenerate(function (err) {
       if (err) next(err)
    
       req.session.accessToken = req.user.accessToken;

       // Now save the newly generated session.
       req.session.save(function (err) {
          if (err) return next(err)
          res.redirect('/')
      });

    });
 });

© www.soinside.com 2019 - 2024. All rights reserved.