Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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
Javascript 角度验证:处理新选项卡或新浏览器窗口_Javascript_Angularjs_Authentication_Jwt - Fatal编程技术网

Javascript 角度验证:处理新选项卡或新浏览器窗口

Javascript 角度验证:处理新选项卡或新浏览器窗口,javascript,angularjs,authentication,jwt,Javascript,Angularjs,Authentication,Jwt,我的基于AngularJS的应用程序旨在使用localStorage保存身份验证后从后端返回的JWT auth令牌。对于每个到后端的请求(POST、GET等),应用程序都使用拦截器将令牌背载到后端。在我遇到以下问题之前,此过程一直运行良好: My manager不允许使用localStorage保存用户名和JWT auth令牌,因为除非他/她有意注销应用程序(从localStorage中清除缓存),否则它们将保留在浏览器中。如果用户在未注销的情况下关闭浏览器,缓存将保留在localStorage

我的基于AngularJS的应用程序旨在使用localStorage保存身份验证后从后端返回的JWT auth令牌。对于每个到后端的请求(POST、GET等),应用程序都使用拦截器将令牌背载到后端。在我遇到以下问题之前,此过程一直运行良好:

  • My manager不允许使用
    localStorage
    保存用户名和JWT auth令牌,因为除非他/她有意注销应用程序(从localStorage中清除缓存),否则它们将保留在浏览器中。如果用户在未注销的情况下关闭浏览器,缓存将保留在localStorage中

  • 由于问题1,我转而使用
    sessionStorage
    存储用户名和JWT身份验证令牌,但是,当用户右键单击某些链接以在新选项卡或新浏览器窗口中打开应用程序时,这会导致进一步的问题。在新选项卡/窗口中,应用程序无法看到用户已通过身份验证,并且前往后端的请求被拒绝(
    401 error
    ),因为应用程序无法在新选项卡/窗口的会话存储中找到JWT auth令牌

  • 如果我将用户名和JWT auth令牌作为变量缓存在JavaScript代码中,那么如果用户刷新浏览器,应用程序将丢失它们


  • 这就是我在angular中使用JWT auth令牌时遇到的困境。是否有更好的解决方案来处理这些需求:不使用localStorage,应用程序应在新选项卡或新浏览器窗口中继续使用相同的auth JWT令牌。谢谢

    这是angular/server设置中的一个设计缺陷,而不是一个简单的令牌问题

    通常,当用户在新窗口/选项卡中打开一个链接,启动一个干净的新会话时。URL将指向需要身份验证的内容,由于这是一个新会话,angular应用程序应该尝试还原它。用户已在启用“记住我”的情况下登录,或者将提示他们输入用户名/密码。成功验证用户后,应使用重定向还原URL

    所以它是这样工作的

    http://example.com/page1 <-- user uses ctrl+click to open new tab
    http://example.com/page2 <-- user doesn't have session
    http://example.com/signin?url=/page2 <-- redirect to sign in with return path
    http://example.com/page2 <-- user session restored after sign in
    

    http://example.com/page1 您是否尝试过在域的cookies中设置JWT。这样,如果设置了cookie,它将包含在您从应用程序发出的每个GET/POST请求中,并将解决您的新选项卡或新浏览器窗口问题。

    我也有同样的问题@今天你找到好的解决办法了吗?哇,还是没有答案。奇怪的是,这个问题只有3票赞成和1票赞成!所以你建议继续使用本地存储?这是我一直在想的,但是经理不喜欢持久性。@TonyGW不,我是说不要将令牌放在本地存储中。