PassportJS 给了我令牌,但是 returns 401 Unauthorized
PassportJS gives me the tokens but returns a 401 Unauthorized
我正在为访问 Google API v3 的桌面应用程序编写网络服务器,为此我需要使用他们的 oAuth 2.0。
网络服务器将 PassportJS 与 passport-google-oauth20
策略结合使用,它可以正常工作,因为我收到了访问令牌和刷新令牌。
我不打算保留用户数据,也不需要桌面应用程序的 cookie。我真正需要的是 accessToken 和 refreshToken 这样用户就不需要每次都登录了。
到目前为止一切顺利,但是在 Google 发送令牌后,它不知何故失败了?我很确定发送 401 的不是 Google 而是我设置它的方式。
我试过了 但这对我不起作用,因为我需要令牌。
这是策略设置:
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
在您的策略回调中,您需要为通过身份验证的用户提供 Passport,否则它将认为这是一次失败的身份验证尝试。
通过将 done()
更新为以下内容,我能够使您的代码正常工作并重定向到 authorized
路由:
(accessToken, refreshToken, _, done) => {
console.log("access token: ", accessToken);
console.log("refresh token: ", refreshToken);
done(null, _)
}
我正在为访问 Google API v3 的桌面应用程序编写网络服务器,为此我需要使用他们的 oAuth 2.0。
网络服务器将 PassportJS 与 passport-google-oauth20
策略结合使用,它可以正常工作,因为我收到了访问令牌和刷新令牌。
我不打算保留用户数据,也不需要桌面应用程序的 cookie。我真正需要的是 accessToken 和 refreshToken 这样用户就不需要每次都登录了。
到目前为止一切顺利,但是在 Google 发送令牌后,它不知何故失败了?我很确定发送 401 的不是 Google 而是我设置它的方式。
我试过了
这是策略设置:
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
在您的策略回调中,您需要为通过身份验证的用户提供 Passport,否则它将认为这是一次失败的身份验证尝试。
通过将 done()
更新为以下内容,我能够使您的代码正常工作并重定向到 authorized
路由:
(accessToken, refreshToken, _, done) => {
console.log("access token: ", accessToken);
console.log("refresh token: ", refreshToken);
done(null, _)
}