Authentication Auth0和angular2:如何设置callbackURL并捕获令牌?

Authentication Auth0和angular2:如何设置callbackURL并捕获令牌?,authentication,angular,angular2-routing,auth0,Authentication,Angular,Angular2 Routing,Auth0,我正在尝试使用and(2.0.0-rc.6)实现无密码身份验证,使用and 表单正常显示,身份验证电子邮件使用以下代码发送: this.lock.magiclink({ callbackURL:"http://localhost:3000/#/sandbox" }); 问题发生在我单击电子邮件中的神奇链接之后: 即使魔术链接的重定向uri看起来是正确的(重定向uri=http%3A%2F%2Flocalhost%3A3000%2F%23%2Fsandbox),它也会被忽略 相

我正在尝试使用and(2.0.0-rc.6)实现无密码身份验证,使用and

表单正常显示,身份验证电子邮件使用以下代码发送:

this.lock.magiclink({
    callbackURL:"http://localhost:3000/#/sandbox"
    });
问题发生在我单击电子邮件中的神奇链接之后:

  • 即使魔术链接的重定向uri看起来是正确的(重定向uri=http%3A%2F%2Flocalhost%3A3000%2F%23%2Fsandbox),它也会被忽略

  • 相反,在成功登录(签入Auth0日志)后,地址栏中的url(简短地): (注意#而不是预期的问号)

  • 然后(大约一秒钟后)它重定向到:


我的问题是:

  • 如何让Auth0实际重定向到callbackURL
  • 即使uri格式不正确,如何使用新的angular2路由器捕获令牌?(查询前缺少问号)

  • 经过多次努力,我找到了一个解决办法

    TL;博士使用PathLocationStrategy(HTML 5 pushState),而不是“哈希URL”样式。


    在Auth0控制台(客户端设置)中的
    允许的注销URL
    允许的来源
    下面,指定了:

    请注意,在验证这些URL时,查询字符串和哈希信息不会被考虑在内

    所以我想它可能也适用于
    允许的回调URL
    ,即使它没有指定

    这可以解释为什么
    callbackURL
    被忽略


    诀窍是去掉URL中的散列(#);哈希是中的默认
    LocationStrategy

    为此,在
    app.modules.ts
    中,将
    RouterModule.forRoot(路由,{useHash:true})
    更改为
    RouterModule.forRoot(路由,{useHash:false})


    虽然它本应该可以工作,但我遇到了另一个问题:当重新加载页面时,它会显示一个空白页面,其中包含以下消息:

    <% if (webpackConfig.htmlElements.headTags) { %>
    
    在Auth0客户端设置允许的回调URL中,插入:

    http://localhost:3000/sandbox
    
    和保存

    现在,在成功登录后(当我单击电子邮件中的神奇链接时),它将打开一个浏览器窗口,其中包含以下URL:

    http://localhost:3000/sandbox#access_token=xxxxxxxxxxx&id_token=yyyyyyyyyyy&token_type=Bearer
    
    它应该呆在那里。捕获和保存令牌现在应该很简单

    http://localhost:3000/sandbox#access_token=xxxxxxxxxxx&id_token=yyyyyyyyyyy&token_type=Bearer