Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
Ember.js 余烬简单身份验证:保存用户';ajax错误后的URL_Ember.js_Ember Simple Auth - Fatal编程技术网

Ember.js 余烬简单身份验证:保存用户';ajax错误后的URL

Ember.js 余烬简单身份验证:保存用户';ajax错误后的URL,ember.js,ember-simple-auth,Ember.js,Ember Simple Auth,我在我的ember js应用程序中应用了ember-simple-auth-0.6.4.js,有一种情况非常常见。以下是步骤的顺序 用户在应用程序中进行身份验证(我使用自定义身份验证程序)。这样会话就有效了 约20分钟不活动后,后端会话将无效 用户转到一个路由(从AuthenticatedRouteMixin派生),由于客户端应用程序中的余烬会话仍然有效->“会话已验证”检查通过 然后调用路由模型钩子,在其中我尝试使用ajax请求从后端加载一些数据,我得到401个未经授权的响应,因为后端会话无效

我在我的ember js应用程序中应用了ember-simple-auth-0.6.4.js,有一种情况非常常见。以下是步骤的顺序

  • 用户在应用程序中进行身份验证(我使用自定义身份验证程序)。这样会话就有效了
  • 约20分钟不活动后,后端会话将无效
  • 用户转到一个路由(从AuthenticatedRouteMixin派生),由于客户端应用程序中的余烬会话仍然有效->“会话已验证”检查通过
  • 然后调用路由模型钩子,在其中我尝试使用ajax请求从后端加载一些数据,我得到401个未经授权的响应,因为后端会话无效
  • 401错误响应后,客户端的应用程序会话无效-然后调用应用程序路由mixin中定义的sessionInvalidationSucceeded()处理程序,其中位置更改:window.location.replace(Configuration.applicationRootUrl) 问题是:如果applicationRootUrl中定义的url处于经过身份验证的路由下,则登录页面将显示给用户,但在身份验证之后,用户再次转到applicationRootUrl,而不是最初发生ajax错误的页面

    我的解决方案是:

    • 在AuthenticatedRouteMixin beforeModel()钩子中,我存储最后一次转换:

      Configuration.beforeInvalizationTransition=转换

    • 在ApplicationRouteMixin I中,重新定义sessionInvalidatedSucceeded钩子:

      sessioninvalidationsucceed:function(){
      if(配置。失效转换前){
      this.get(Configuration.sessionPropertyName)
      .set('attemptedTransition',Configuration.beforeInvalizationTransition);
      }
      this.transitiono(Configuration.authenticationRoute);

    因此,如果发生401错误,用户将被重定向到登录页面(Configuration.authenticationRoute),并且发生错误的路由将被存储为attemptedTransition,因此在成功登录后,用户将被重定向到他停止工作的位置


    这有意义吗?或者有更优雅的解决方案解决这个问题吗?

    您实际上可以立即在会话中存储最后一次转换,而无需使用
    配置。BeforeInvalizationTransition
    。您还可以在访问令牌即将过期之前刷新它,就像OAuth 2.0身份验证程序那样(请参见此处:)

    谢谢您的回复!这不应该是保存会话中最后一次转换的逻辑吗?我想知道到已验证路由的最后一次转换,以便在成功登录后重试。该功能实际上是库的一部分,但不适用于会话被禁用的情况过期。也很难检测到会话过期的情况,例如401可能有不同的原因,例如用户试图做某事。他们不被允许。