【发布时间】:2021-12-24 00:24:30
【问题描述】:
正如标题所说的那样;我想知道如何在 Passport.js 中实现令牌的检索。
目前我实施了以下策略:
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: '/api/auth/google/callback'
},
async (accessToken, refreshToken, profile, done) => {
const newUser = {
googleId: profile.id,
displayName: profile.displayName,
firstName: profile.name.givenName,
lastName: profile.name.familyName,
image: profile.photos[0].value,
email: profile.emails[0].value
};
try {
let user = await User.findOne({ googleId: profile.id });
if(user) {
done(null, user);
} else {
user = await User.create(newUser);
await Key.create({
googleId: user.googleId,
keyProvider: 'Google',
token: accessToken,
refreshToken: refreshToken
});
done(null, user);
}
} catch (err) {
console.error(err);
}
}));
现在,例如,我想调用 Google API,让我们说这条路线:
router.get('/list', async (req, res) => {
console.log('list called');
const result = await axios({
method: "GET",
headers: {
'Authorization': "Bearer [token which is stored in my db]",
},
"Content-Type": "application/json",
url: 'https://www.googleapis.com/youtube/v3/subscriptions?channelId=[someid]',
});
console.log(result);
});
我将在哪里以及如何实现一个函数/中间件/模块,每次我向 Google API 发出请求时都会调用它,它会在出错时检索新的 accessToken,然后重试调用?
由于我对 Node.js/Express 还很陌生,我不知道如何将这样的流程放入代码中。我知道要实现的唯一选择是使用 axios 捕获错误,然后在每个 Google API 端点中手动检索带有冗余代码的新 accessToken。
【问题讨论】:
标签: node.js google-api passport.js access-token refresh-token