0

我在我的应用程序中使用 Passport.js 和 express 来登录 Google Oauth。但是当我尝试登录时,我收到以下错误:invalid parameter value for redirect_uri: Missing authority: http:localhost:3000/google/callback当我访问时localhost:3000/google/callback,我得到了Missing required parameter: scope。相关代码:

const express = require("express");
const cors = require("cors");
const mongoose = require("mongoose");
const passport = require("passport");
const app = express();
const port = process.env.PORT || 3000;
require("dotenv").config();
require("./passport-setup")

app.use(passport.initialize())
app.use(passport.session())

app.get('/success', (req, res) => {
  res.render("/profile.html")
})

app.get('/login', passport.authenticate('google', { scope: 'email' }));
app.get('/google/callback', passport.authenticate('google', { failureRedirect: '/failed' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/success');
  }
);

护照配置(相关代码):

const passport = require("passport");

const GoogleStrategy = require("passport-google-oauth2").Strategy

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL: process.env.CALLBACK_URL,
    passReqToCallback: true
},function(request,accessToken,refreshToken,profile,done){
    console.log(profile)
    return done(null, profile)
}

))

PS:我找到了这个答案,但我不知道他所说的“JSON 密钥”是什么意思。也许 API 更新了。

任何帮助将非常感激。提前致谢。


编辑

我提供给 google 的回调 url 与我的 `app.get` 不匹配。固定的。
4

2 回答 2

1

PS:我找到了这个答案,但我不知道他所说的“JSON 键”是什么意思——提到你的人GoogleStrategy一个 JSON 对象包含零个、一个或多个键值对。

/* SECURE COOKIES TRUE MADE GOOGLE 登录/注册工作 */

尝试使用 Google 帐户登录/注册时出现错误:并且之前Missing required parameter: scope添加的以下代码行使其正常工作! app.use(passport.initialize());

if (app.get("env") === "production") {
    app.set("trust proxy", 1);
    session.cookie.secure = true;
}

您可能必须实施express-session以使其工作(查看 npm 网站以获取有关如何使用的文档),但只需在顶部声明:

      const session = require("express-session");

app.use(passport.initialize())添加此行之前:

      app.use(
         session({
            secret: process.env.SESSION_SECRET,
            resave: false,
            saveUninitialized: false,
            cookie: {},
         })
      );
于 2022-03-02T23:16:38.827 回答
0

我的回调 URL 是http:localhost:3000/google/callback

将其设置为/gooogle/callback对我有用。

于 2021-02-03T10:14:02.140 回答