5

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

  1. 那是一个错误。

错误:invalid_request

缺少必需参数:redirect_uri

请求详细信息范围= 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(空,配置文件);}));

路线在这里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。然后我可以选择“允许”或“拒绝”该请求。

4

3 回答 3

21

在定义 GoogleStrategy 时,JSON 键应该是 callbackURL 而不是 callbackUrl(即大写 URL)。也有这个“问题”;-)

于 2015-10-08T10:57:09.623 回答
1

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


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);
       });
  }
));


PS:我在stackoverflow上的第一个。请忽略错误并帮助我改进。

于 2020-05-15T22:46:14.067 回答
0

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

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

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

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

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