ruby-on-rails - 使用 Devise 的 RoR 中的 session 超时消息

标签 ruby-on-rails ajax ruby-on-rails-3 authentication devise

我有一个使用设备保护的应用程序, session 超时为 30 分钟。使用设计,正常导航一切正常,如果用户在超时时单击链接,他们会被重定向回登录屏幕,并显示一条消息“您的 session 已过期,请重新登录以继续。”,非常好。 p>

但是我在很多地方都有ajax。如果 session 超时并且用户执行 ajax 操作,我想要与上面相同的行为,而不是在后台默默地失败并出现 401 错误。

到目前为止,我在每个页面上都有这个 jquery 代码来捕获 401 并重新加载:

$(document).ajaxError(function(e, error) {
  switch(error.status) {

    case 401: {
      // unauthorised (possible timeout)
      location.reload();
      break;
    }

它运行得很好,但有一个恼人的问题:

因为 ajax 请求首先命中 devise,所以当我的应用程序重新加载页面时,我被定向到登录页面,但我没有看到超时消息,我看到未经身份验证的“您需要登录或注册才能继续” ”。消息。

有没有办法确保在第二次请求时设备仍然显示超时消息?

最佳答案

我认为您需要手动显示此消息,例如通过重定向到特定网址或设置某些查询参数。

问题是,在 401 请求之后,您获得了一个新 session ,当您重新加载浏览器时,下一个请求将使用一个空 session 来访问您的应用程序。这就是您收到未经身份验证的消息的原因。

关于ruby-on-rails - 使用 Devise 的 RoR 中的 session 超时消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032287/

相关文章:

ruby - 如何提取给定属性的所有值并将它们放入数组中?

mysql - "MySQL server has gone away"与 Ruby on Rails

ruby-on-rails - 使用助手来缩短 Rails 中的 strftime

.net - PageMethods 未定义

javascript - 使用 JQUERY 和 Ajax 获取祈祷时间 JSON 数据

javascript - Jquery FileUpload表单url问题

ruby-on-rails - less-rails-bootstrap ... 哪里有 less 文件

ruby-on-rails - 如何正确构建带参数的 URI?

ruby-on-rails - Rails - Rakefile

ruby-on-rails - POW/Rails 错误:启动 applicationBundler::GemNotFound 时出错:在任何来源中都找不到 minitest-4.7.5