这是非常奇怪的行为。每次我得到一个新的凭证,我点击链接,我得到同意屏幕,但之后同意屏幕不再显示,而是请求到谷歌服务器和对回调url的响应在幕后发生。我注销了用户"/auth/ logout ",我也删除了手动存储的所有cookie,当我点击按钮时,我会自动重新登录。
我相信编码没有问题,我检查了console.developers的同意屏幕,但没有任何与此问题相关的内容。

这是一个typescript项目。这是路线
import passport from "passport";
import { Application, Request, Response } from "express";
export const authRoutes = (app: Application) => {
app.get(
"/auth/google",
passport.authenticate("google", {
scope: ["profile", "email"],
})
);
app.get(
"/auth/google/callback",
passport.authenticate("google"),
(req: Request, res: Response) => {
res.redirect("/");
}
);
// passport sees the code here and it knows that it has to use the code to get user
app.get("/auth/current_user", (req: Request, res: Response) => {
res.send(req.user);
});
app.get("/auth/logout", (req: Request, res: Response) => {
req.logout();
res.json({ user: req.user });
});
};以下是passport设置:
import GoogleStrategy from "passport-google-oauth20";
import passport from "passport";
import { User, UserDoc } from "../database/models/User";
// passport sets up the cookie and stuffs the user's database id not the googleId.
passport.serializeUser(
(user: UserDoc, done: (err: any, user: UserDoc) => void) => {
done(null, user.id);
}
);
passport.deserializeUser(
async (id: string, done: (err: any, user: UserDoc) => void) => {
const user = await User.findById(id);
if (user) {
done(null, user);
}
}
);
passport.use(
new GoogleStrategy.Strategy(
{
clientID: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
callbackURL: "http://localhost:4500/auth/google/callback",
proxy: true,
},
async (accessToken, refreshToken, profile, done) => {
const existingUser = await User.findOne({ googleId: profile.id });
if (existingUser) {
done(undefined, existingUser);
}
const user = await new User({ googleId: profile.id }).save();
done(undefined, user);
}
)
);发布于 2020-12-11 21:57:29
你看到的是你想要的行为--一旦用户授权了你请求的范围(显示在同意屏幕上),谷歌就不需要再次获得用户的同意。它会对此进行跟踪。
用户可以在https://myaccount.google.com/permissions查看和撤销对您的应用程序(移动或基于web)的访问权限。这在开发过程中特别有用,这样您就不必不断创建新帐户来进行测试。
https://stackoverflow.com/questions/65250881
复制相似问题