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

时间:2015-10-03 16:41:19

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

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

  
      
  1. 这是一个错误。
  2.         

    错误:invalid_request

         

    缺少必需参数:redirect_uri

         

    请求详细信息   范围= https://www.googleapis.com/auth/plus.login   RESPONSE_TYPE =代码   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&#34 ;;   var GOOGLE_CLIENT_SECRET =" xxxx&#34 ;;

     

passport.use(新的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,配置文件); }));

路线在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。然后我可以选择"允许"或者"拒绝"请求。

3 个答案:

答案 0 :(得分:15)

在定义GoogleStrategy时,JSON键应该是callbackURL而不是callbackUrl(即大写URL)。如果这个'问题'以及; - )

答案 1 :(得分:0)

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

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

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

  • 确保在dev api console中正确配置了Google API。具体做法是:

    1. 在API和auth下凭证| OAuth许可屏幕 - 所有必需的网址。
    2. 在API和auth下凭据 - 查找您的Web api客户端并查看您授权的所有相关URI。如果呼叫来自或重定向到本节未列出的页面,则auth将不起作用。

答案 2 :(得分:0)

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


SynthLookAndFeel


P.S:我的第一个关于stackoverflow的内容。请忽略错误并帮助我改进。