我有一个单页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
相同的参数发出。
利用此事件,您可以执行以下操作:
- 订阅
hash_parsed
事件: - 如果
hash_parsed
使用null
排放,并且localStorage
没有指示用户已经登录,则重定向到登录。 - 如果
hash_parsed
发出了非零值,即authenticated
或authorization_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
}
});