当我在google登录页面中选择一个帐户(是的,与我在Google中选择的帐户)后,我得到了这个错误,而不是控制台记录配置文件!
TokenError: Bad Request
at Strategy.OAuth2Strategy.parseErrorResponse (/Users/ /my-blog/api/node_modules/passport-oauth2/lib/strategy.js:373:12)
at Strategy.OAuth2Strategy._createOAuthError (/Users/ /my-blog/api/node_modules/passport-oauth2/lib/strategy.js:420:16)
at /Users/ /my-blog/api/node_modules/passport-oauth2/lib/strategy.js:177:45
at /Users/ /my-blog/api/node_modules/oauth/lib/oauth2.js:191:18
at passBackControl (/Users/ /my-blog/api/node_modules/oauth/lib/oauth2.js:132:9)
at IncomingMessage.<anonymous> (/Users/ /my-blog/api/node_modules/oauth/lib/oauth2.js:157:7)
at IncomingMessage.emit (node:events:532:35)
at endReadableNT (node:internal/streams/readable:1346:12)
at processTicksAndRejections (node:internal/process/task_queues:83:21)PassportJs 安装程序:
const User = require("./models/User");
const mongoose = require("mongoose");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
module.exports = function (passport) {
passport.use(
new GoogleStrategy(
{
clientID: "",
clientSecret: "",
callbackURL: "api/auth/google/callback",
},
async (accessToken, refreshToken, profile, done) => {
console.log(profile)
}
)
)
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => done(err, user))
})
}在这里,它应该控制台记录从谷歌的配置文件!
My Auth.js:
const passport = require("passport");
router.get("/google", passport.authenticate("google", { scope: ["profile"] }))
router.get(
'/google/callback',
passport.authenticate('google', { failureRedirect: '/' }),
(req, res) => {
res.redirect('/register')
}
)My index.js:
const authRoute = require("./routes/auth");
const passport = require ("passport");
// Passport config
require('./passport')(passport);
const session = require('express-session')
// Sessions
app.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
})
)
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
app.use("/api/auth", authRoute);
app.listen("4000", () => {
console.log("Backend is running.");
});Google:

我只希望从google返回的配置文件显示在我的控制台日志中。
发布于 2022-08-30 22:01:32
我就是这样解决的。首先,您需要添加您的clientID和clientSecret,您可以在凭据页面上执行这里。
设置之后,代码应该如下所示:
passport.use(
new GoogleStrategy(
{
clientID: "YOUR CLIENT-ID",
clientSecret: "YOUR CLIENT-SECRET",
callbackURL: "api/auth/google/callback",
},
async (accessToken, refreshToken, profile, done) => {
console.log(profile)
}
)
)那么您的callbackURL应该包括您的API baseUrl,对我来说,它是:
callbackURL: "http://5000/api/auth/google/callback",此外,您的授权重定向URI、您的登录按钮和您的callbackURL必须共享相同的URL,否则将创建两个cookie并导致您的会话丢失。
这就是我的登录按钮的样子:
<button>
<a href="http://localhost:5000/api/auth/google/callback" >Login with Google</a>
</button>这应该非常好,您应该在控制台上看到您的配置文件。
https://stackoverflow.com/questions/73433601
复制相似问题