【发布时间】:2020-11-21 07:36:29
【问题描述】:
我正在为访问 Google API v3 的桌面应用程序编写网络服务器,为此我需要使用他们的 oAuth 2.0。
网络服务器使用 PassportJS 和 passport-google-oauth20 策略,它可以工作,因为我收到了访问令牌和刷新令牌。
我不打算保留用户数据,也不需要桌面应用程序的 cookie。我真正需要的只是一个 accessToken 和 refreshToken,这样用户就不需要每次都登录了。
到目前为止一切顺利,但在 Google 发送令牌后,它以某种方式失败了?我很确定不是 Google 发送了 401,而是我设置的方式。
我试过这个answer,但这对我不起作用,因为我需要令牌。
这是策略设置:
const passport = require("passport");
const GoogleStrategy = require('passport-google-oauth20').Strategy;
passport.use(
new GoogleStrategy(
{
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: "/oauth/callback"
},
(accessToken, refreshToken, _, done) => {
console.log("access token: ", accessToken);
console.log("refresh token: ", refreshToken);
done(null, null)
}
)
);
这里是服务器的相关部分
server.get("/authorized", (req, res) => res.send("Login Succeeded"));
server.get("/fail", (req, res) => res.send("Login Failed"));
server.get(
"/oauth",
passport.authenticate("google", {
scope: ["https://www.googleapis.com/auth/drive.file", "email"],
accessType: "offline",
approvalPrompt: "force",
})
);
server.get(
"/oauth/callback",
passport.authenticate("google", {
successRedirect: "/authorized",
failureRedirect: "/fail",
failureFlash: true,
failWithError: true,
})
);
如果你想亲眼看看,here is a snippet repo
【问题讨论】:
标签: node.js express passport.js google-oauth