2016-11-27 89 views
4

我有一个与下面的回调URL配置的客户端Auth0:获得“回调URL不匹配”与Auth0

http://localhost:4200

我可以登录就好了。

问题是当我导航到我的应用程序中的某个URL:http://localhost:4200/places。这里是发生了什么:

  1. 我浏览到http://localhost:4200/places
  2. 角重定向我(正确),以http://localhost:4200
  3. 我尝试登录
  4. 我从Auth0称“URL” http://localhost:4200/places得到一个错误“是不在允许的回调URL列表中“。

Auth0是正确的,http://localhost:4200/places是不是在我的允许回调的URL —的名单,我不希望它是。我不想列出我的用户可能会被踢回登录屏幕的任何和每个URL。

所以,由于某种原因,一些正在发生的事情是在告诉Auth0的参照网址是http://localhost:4200/places而非http://localhost:4200,即使http://localhost:4200其实是在地址栏中的URL,当我尝试登录。

我意识到我可以指定http://localhost:4200作为redirectUrl并“解决”问题,但是我必须使redirectUrl在dev,staging和production上有所不同。看起来这可能不是人们通常解决这个问题的方式。

如何获得Auth0不尝试将我重定向到/places

+2

这是因为你如何初始化Lock,你可以从'window.top.location.hostname'获得主机;) – ShrekOverflow

回答

1

我遇到了同样的问题,并用史瑞克的建议解决了这个问题(与我不一样)。但是,我不得不使用window.top.location.origin而不是window.top.location.hostname。对于我来说,window.top.location.origin等同于我在Auth0的客户端设置中允许的回调URL值。

这里是我的代码:

let stateOptions = 
    { 
     "auth0_authorize": this.authNonce, 
     "return_url": router.url 
    }; 

    let options = 
     { 
      closable: false, 
      languageDictionary: 
      { 
       emailInputPlaceholder: "[email protected]", 
       title: "Log me in" 
      }, 
      auth: 
      { 
       redirectUrl: window.top.location.origin, 
       redirect: true, 
       responseType: 'token', 
       params: 
       { 
        state: btoa(JSON.stringify(stateOptions)), 
        scope: 'openid user_id name nickname email picture' 
       } 
      } 
     }; 

    this.lock = new Auth0Lock('[your-auth0-clientid]', '[your-auth0-domain]', options); 
0

这个问题也困惑了我很久的时间。最后,我在Auth0的配置页面中找到了它。

enter image description here

这是非常有趣的做到这一点。我不知道Auth0为什么使用它来保存回调网址的原因。实际上,我们总是在代码中设置RedirectURL。这与谷歌的授权完全不同。无论如何,问题解决了。

顺便说一句,我谷歌在这个错误在一开始,但我发现这个解决方案在Auth0配置页面。顶部有一个视频教程。

我希望这有助于。