如何检测当前请求是否是身份验证回调?

时间:2016-12-25 23:50:26

标签: oauth-2.0 single-page-application auth0

我有一个单页JavaScript应用程序,我正在使用Auth0服务进行注册/登录。

我已经集成了Lock小部件,我在用户通过身份验证后将字符串保存到localStorage,如下所示:

lock.on("authenticated", function(authResult) 
{
    localStorage.setItem('login', authResult.idToken);
}

问题是,当Auth0在登录后将它们重定向回我的应用程序时,authenticated事件仅在加载页面后触发,但到那时,我已经完成了检查以查看{设置了{1}}字符串(它不是);因此,用户不断被要求再次登录:

localStorage

我试图查看回调后是否有任何特殊的内容传递到页面 - 但引用者并不总是在那里。

如果我没有自动提示用户登录,而是显示登录按钮 - if(localStorage.getItem('login') == undefined) { lock.show(function(err, profile, token) { // ... } } 事件从未因某种原因而触发。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

根据提供的信息,您似乎在重定向模式下使用锁定,如果是这种情况,您可以使用hash_parsed event来了解Lock是否找到了将要处理的响应。

  

每次在重定向模式(默认值)下初始化新的Auth0Lock对象时,它都会尝试解析URL的哈希部分,查找登录尝试的结果。之后,如果无法在哈希值中找到任何内容,则null会发出此事件。如果出现问题,它将在成功登录后使用与authenticated事件相同的参数发出,或者如果出现问题,则使用与authorization_error相同的参数。

利用此事件,您可以执行以下操作:

  1. 订阅hash_parsed活动:
  2. 如果hash_parsed发出nulllocalStorage没有任何迹象表明用户已登录,则重定向到登录。
  3. 如果使用非空值发出hash_parsed,则会发出authenticatedauthorization_error,您可以做出相应的反应。
  4. 一些示例代码:

    lock.on("hash_parsed", function (response) {
        if (!response && !localStorage.getItem('login')) {
            // Redirect to the login screen
        } else {
            // Either the user is already logged in or an authentication
            // response will be processed by Lock so don't trigger
            // an automatic redirect to login screen
        }
    });
    
相关问题