缺少必需的参数:redirect_uri with passport-google-oauth

Missing required parameter: redirect_uri with passport-google-oauth

在我的 MEAN Stack 应用程序中使用 passport-google-oauth: "0.2.0"(在此处找到:https://github.com/jaredhanson/passport-google-oauth)。当我 运行 应用程序并尝试使用 Google API 登录时,返回此错误

  1. That’s an error.

Error: invalid_request

Missing required parameter: redirect_uri

Request Details scope=https://www.googleapis.com/auth/plus.login response_type=code redirect_uri= client_id=xxxx-xxxx.apps.googleusercontent.com

重定向参数在这里 passport-init.js

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;

var GOOGLE_CLIENT_ID = "xxx-xxx.apps.googleusercontent.com"; var GOOGLE_CLIENT_SECRET = "xxxx";

passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackUrl: "http://127.0.0.1:3000/auth/google/oauth2callback" }, function(accessToken, refreshToken, profile, done){ done(null,profile); } ));

路线在这里authenticate.js

router.get('/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login']}), function (req, res){ });

router.get('/google/oauth2callback', passport.authenticate('google', { successRedirect: '/auth/success', failureRedirect: '/auth/failure' }) , function (req, res) {res.redirect('/');} );

我确定我遗漏了一些简单的东西,但我不知道在这个问题中添加什么可以为您提供最好的信息。请提问,我会尽力回答你。这就是相关数据的感觉。

有趣的是,如果我手动添加 callbackUrl,那么一切都会很好。我可以达到 Google API 罚款。然后我可以选择 "allow" 或 "deny" 请求。

我有一个使用相同策略的工作示例。由于我没有收到此错误,无法确定问题所在,但我想建议您检查以下内容:

  • 添加到您的 google 策略创建(新的 GoogleStrategy({...}))范围:

    范围:'https://www.googleapis.com/auth/userinfo.email',

  • 确保您的 google api 在 dev api console 中正确配置。具体来说:

    1. 在 API 和授权下 |证书 | OAuth 同意屏幕 - 所有必需的 url.
    2. 在 API 和授权下 |凭据 - 查找您的网络 api 客户端并查看您授权了所有相关的 URI。如果调用来自或重定向到未在本节中列出的页面,则身份验证将不起作用。

定义 GoogleStrategy 时,JSON 键应该是 callbackURL 而不是 callbackUrl(即大写 URL)。也有这个 'issue' ;-)

我用类似的东西- 1. 确保是 URL 而不是 uri。 2. 确保您注册的回调 URL 与您请求的回调相同。


var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;

// Use the GoogleStrategy within Passport.
//   Strategies in Passport require a `verify` function, which accept
//   credentials (in this case, an accessToken, refreshToken, and Google
//   profile), and invoke a callback with a user object.
passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://www.example.com/auth/google/callback"
    //should be same as the one you registered in credentials.
  },
  function(accessToken, refreshToken, profile, done) {
       User.findOrCreate({ googleId: profile.id }, function (err, user) {
         return done(err, user);
       });
  }
));


P.S:我在 Whosebug 上的第一个。请忽略错误并帮助我改进。

我的问题出现在使用 WSL 进行身份验证时。出现以下错误:

error issue

要解决,请在您的终端中使用命令 gcloud init --console-only