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



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

我已经集成了锁定小部件,并且在用户进行身份验证后,我将字符串保存到localStorage,例如:

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

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

if(localStorage.getItem('login') == undefined)
{
   lock.show(function(err, profile, token) 
   {
       // ...
   }
}

我试图查看回调后是否有任何特殊的东西传递到页面上 - 但转介师并不总是在那里。

如果我不自动提示用户登录,而是显示登录按钮 - authenticated事件永远不会出于某种原因发射。

我如何解决这个问题?

基于信息,只要您似乎在重定向模式下使用锁定,如果是这样,您可以使用 hash_parsed事件来知道锁定是否会找到响应,它将处理它会处理。

每当以重定向模式初始化新的auth0lock对象(默认值)时,它将尝试解析URL的哈希部分,以寻找登录尝试的结果。之后,如果在哈希中找不到任何内容,则将使用null发射此事件。成功登录后,它将与authenticated事件相同的参数或与authorization_error相同的参数发出。

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

  1. 订阅hash_parsed事件:
  2. 如果hash_parsed使用null排放,并且localStorage没有指示用户已经登录,则重定向到登录。
  3. 如果hash_parsed发出了非零值,即authenticatedauthorization_error将发出,您可以相应地做出反应。

一些示例代码:

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
    }
});

最新更新