首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TokenError: Strategy.OAuth2Strategy.parseErrorResponse的坏请求

TokenError: Strategy.OAuth2Strategy.parseErrorResponse的坏请求
EN

Stack Overflow用户
提问于 2022-08-21 10:34:22
回答 1查看 219关注 0票数 0

当我在google登录页面中选择一个帐户(是的,与我在Google中选择的帐户)后,我得到了这个错误,而不是控制台记录配置文件!

代码语言:javascript
复制
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 安装程序:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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返回的配置文件显示在我的控制台日志中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-30 22:01:32

我就是这样解决的。首先,您需要添加您的clientID和clientSecret,您可以在凭据页面上执行这里

设置之后,代码应该如下所示:

代码语言:javascript
复制
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,对我来说,它是:

代码语言:javascript
复制
      callbackURL: "http://5000/api/auth/google/callback",

此外,您的授权重定向URI、您的登录按钮和您的callbackURL必须共享相同的URL,否则将创建两个cookie并导致您的会话丢失。

这就是我的登录按钮的样子:

代码语言:javascript
复制
<button>
    <a href="http://localhost:5000/api/auth/google/callback" >Login with Google</a>
</button>

这应该非常好,您应该在控制台上看到您的配置文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73433601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档