我有一个单页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)
{
// ...
}
}
事件从未因某种原因而触发。
我该如何解决这个问题?
答案 0 :(得分:0)
根据提供的信息,您似乎在重定向模式下使用锁定,如果是这种情况,您可以使用hash_parsed
event来了解Lock是否找到了将要处理的响应。
每次在重定向模式(默认值)下初始化新的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
}
});