我有三个文件,
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;
}));
app.use(session({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));
app.use(passport.session());
app.use("/auth", authRoute);
app.use("/repo", repoRoute);
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 值。
你变得不确定,因为 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('/')
});
});
});