Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 2.0 如何检测当前请求是身份验证回调?_Oauth 2.0_Single Page Application_Auth0 - Fatal编程技术网

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

Oauth 2.0 如何检测当前请求是身份验证回调?,oauth-2.0,single-page-application,auth0,Oauth 2.0,Single Page Application,Auth0,我有一个单页JavaScript应用程序,我正在使用Auth0服务进行注册/登录 我已经集成了锁小部件,在用户经过身份验证后,我正在将一个字符串保存到localStorage,如下所示: lock.on("authenticated", function(authResult) { localStorage.setItem('login', authResult.idToken); } 问题是,当Auth0在登录后将它们重定向回我的应用程序时,authenticated事件仅在加载页

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

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

lock.on("authenticated", function(authResult) 
{
    localStorage.setItem('login', authResult.idToken);
}
问题是,当Auth0在登录后将它们重定向回我的应用程序时,
authenticated
事件仅在加载页面后才会触发,但到那时,我已经检查了
localStorage
字符串是否已设置(未设置);因此,用户不断被要求再次登录:

if(localStorage.getItem('login') == undefined)
{
   lock.show(function(err, profile, token) 
   {
       // ...
   }
}
我试着看看在一次回调之后是否有什么特别的信息被传递到了页面中——但是推荐人并不总是在那里

如果我没有自动提示用户登录,而是显示一个登录按钮,
authenticated
事件不会出于某种原因触发


如何解决此问题?

根据提供的信息,您似乎正在重定向模式下使用锁,如果是这种情况,您可以使用作为一种方式,以了解锁是否找到了它将处理的响应

每次以重定向模式(默认设置)初始化新的Auth0Lock对象时,它都会尝试解析URL的哈希部分,以查找登录尝试的结果。在此之后,如果在散列中找不到任何内容,此事件将以
null
发出。成功登录后,它将以与
authenticated
事件相同的参数发出,如果出现问题,则以与
authentication\u error
相同的参数发出

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

  • 订阅
    hash_parsed
    事件:
  • 如果
    hash_parsed
    null
    发出,并且
    localStorage
    没有指示用户已登录,则重定向到登录
  • 如果使用非空值发出
    hash\u parsed
    ,则将发出
    authenticated
    authorization\u 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
        }
    });
    

    你好,乔。我尝试了这个示例代码,但它仍然以要求登录的无休止循环结束。登录后,它使用?code=参数重新加载页面,但未正确处理或验证。出现
    ?code=
    表明您正在使用OAuth2授权码授权,该授权码是用于服务器端web应用程序处理的。如果需要一个SPA,其中锁处理身份验证响应,则需要使用隐式授权,以便在URL的哈希片段中传递响应(
    #…
    )。