当前位置: 首页 > 知识库问答 >
问题:

Auth0和angular2:如何设置回调URL和捕获令牌?

微生俊
2023-03-14

我正在尝试使用Auth0和angular2(2.0.0-rc.6)实现无密码身份验证,使用angular2 webpack starter和Auth0锁无密码。

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

this.lock.magiclink({
    callbackURL:"http://localhost:3000/#/sandbox"
    });

问题发生在我单击电子邮件中的神奇链接之后:

>

  • 即使魔术链接的redirect_uri看起来是正确的(redirect_uri=http://localhost:3000/#/sandbox),它也被忽略;

    相反,在成功登录(签入Auth0日志)后,地址栏中的url(简短地):http://localhost:3000/#access_token=xxxxxxxxxx

    然后(大约一秒钟后)它重定向到:http://localhost:3000/#/access_token

    我的问题是:

    1. 如何有Auth0实际上重定向到回调URL?
    2. 我怎么能抓住令牌与新的angular2路由器,即使uri是错误的?(查询前缺少问号)
  • 共有1个答案

    曹鸿风
    2023-03-14

    经过一番挣扎,我找到了一个变通办法。

    TL; DR;使用PathLocationStrategy(超文本标记语言5 pushState),而不是散列URL样式。

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

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

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

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

    诀窍是摆脱URL中的哈希(#);哈希是Angular2 Webpack Starter中默认的LocationStrategy

    要做到这一点,请在应用程序中。模块。ts,更改路由模块。forRoot(路由,{useHash:true})RouterModule。forRoot(路由,{useHash:false})

    虽然它应该工作,但我遇到了另一个问题:当你重新加载一个页面时,它会给出一个带有以下消息的空白页面:

    <% if (webpackConfig.htmlElements.headTags) { %>
    

    在谷歌搜索了一下之后,我在这个页面上找到了一个补丁。

    修复方法是删除webpack-dev-server:"^2.1.0-beta.2"中的carret(^)(dev依赖,package.json),并重新安装包:

    • 将“^2.1.0-beta.2”替换为“2.1.0-beta.2”

    然后,在控制台/终端中,键入:npm安装webpack-dev-server

    现在我所要做的就是更新callbackURL,如下所示:

    this.lock.magiclink({
      callbackURL:"http://localhost:3000/sandbox"
    });
    

    在Auth0客户端设置允许回调URL中,插入:

    http://localhost:3000/sandbox
    

    保存。

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

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

    它应该呆在那里。捕获和保存令牌现在应该很简单。。。

     类似资料:
    • 我正在尝试用以下方法重定向无效的URL 我不想使用解决浏览器支持问题。 我正在使用grunt serve进行本地前端开发和封装,并在生产中与spring boot一起运行。

    • 本文向大家介绍Angular2内置指令NgFor和NgIf详解,包括了Angular2内置指令NgFor和NgIf详解的使用技巧和注意事项,需要的朋友参考一下 在这一章节中,我们来学习如何使用Angular2来展示数据,以及如何使用它的内置指令NgFor和NgIf 首先要确保你有一个可以运行起来的Angular2的样例程序,最好就是我们上一章节中完成的那个QuickStart小项目或者你自己根据官

    • 我有一个返回< code>List的方法。现在我想知道如何正确放置< code>try/catch块。如果我将< code>return语句放在< code>try中,我会得到错误 并非所有代码路径都返回值 如果我放置在之后(就像我目前所做的那样),即使在之后,它也会返回。那么最好的方法应该是什么? 方法如下:

    • 问题是,当比较这两个日期时,令牌将在大约17小时后过期,这是错误的,因为在生成时,令牌应该只长1分钟。 如果有人能帮助我,我非常感激

    • 在直播管理页面点击 “回调设置” ,可以 开启回调通知 并 设置回调地址 ,用于直播开始、直播结束、直播录制、离线回放、回放重置后的通知反馈。 关于直播回调的具体功能及使用方法,请参考:回调接口开发指南 。