【问题标题】:Missing required parameter: redirect_uri with passport-google-oauth缺少必需参数:redirect_uri 和 passport-google-oauth
【发布时间】:2015-12-31 17:08:39
【问题描述】:

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

  1. 这是一个错误。

错误:invalid_request

缺少必需参数:redirect_uri

请求详情 范围=https://www.googleapis.com/auth/plus.login response_type=代码 重定向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({
客户 ID:GOOGLE_CLIENT_ID,
clientSecret:GOOGLE_CLIENT_SECRET,
callbackUrl: "http://127.0.0.1:3000/auth/google/oauth2callback" }, 功能(访问令牌,刷新令牌,配置文件,完成){ 完成(空,配置文件); }));

路线在这里authenticate.js

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

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

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

有趣的是,如果我手动添加 callbackUrl,那么一切都会很好。我可以很好地访问 Google API。然后我可以选择“允许”或“拒绝”该请求。

【问题讨论】:

标签: node.js express google-oauth passport-google-oauth


【解决方案1】:

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

【讨论】:

  • 谢谢!那行得通。我知道我错过了一些东西。没想到这么简单。
  • 对我来说,我有 callBackURL,必须按照你说的 'callbackURL'
【解决方案2】:

我使用类似的东西- 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:我在 stackoverflow 上的第一个。请忽略错误并帮助我改进。

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 那行不通。感谢您的建议,但我仍然得到一个空的 redirect_uri 字段。我假设我的服务器代码中的某个地方缺少redirect_uri。错误中的其余代码来自我的代码。我可以手动插入 ?missing? redirect_uri 并且请求继续正常处理。
    • 您可以深入了解该模块。搜索特定的字符串,看看它发生在哪里。所有的模块都嵌套在你的 node_modules 目录中
    猜你喜欢
    • 2016-04-14
    • 2014-11-30
    • 2016-12-14
    • 2013-01-10
    • 2015-07-13
    • 2012-01-02
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多