【问题标题】:devise authorize user on ajax request根据ajax请求设计授权用户
【发布时间】:2013-06-16 12:49:30
【问题描述】:

我的问题是这样的。

当用户打开两个选项卡并转到需要身份验证的同一页面时,一切都很好。如果然后他在选项卡上注销,他显然会被重定向到登录页面,而不是在另一个选项卡上。这仍然是正常的。

但是,页面上有一些使用 javascript 的功能,如果用户尝试使用它们,他将无法执行操作,并且呈现的“sign_in.json”包含设计错误消息“未经身份验证” .发送此消息后,我需要重定向用户以登录表单。我该怎么做?

【问题讨论】:

  • 如果我理解正确,您希望在显示设计错误消息“未经身份验证”后重定向用户?
  • 有点。我知道这条消息只是因为我在 Web 浏览器的控制台(网络选项卡)下看到它。该消息不会显示给用户。如果他被重定向到唱歌页面,它就会显示出来。服务器日志还显示401 Unauthorized
  • 我对@9​​87654324@ 的理解是,当需要身份验证并且已失败或尚未提供身份验证时会发生这种情况。除此之外,听起来您想覆盖我相信的设计会话控制器内的重定向
  • 我只是偶然发现了一些我认为应该可以解决问题的方法,但还没有。扩展Devise::FailureApp 并覆盖此处显示的respondredirect_url 的一些方法:link。不知道我是否在正确的轨道上。
  • 除了您提供的链接之外,您可能还想看看以下内容 - stackoverflow.com/questions/6240141/…

标签: javascript ruby-on-rails devise


【解决方案1】:

听起来您使用 javascript 向您的服务器发出 ajax 请求,该服务器以 401 和一些 json 数据进行响应,对吧?如果你使用 jQuery,你可以这样做:

# Your ajax call
$.ajax({
  ...
  statusCode: {
    401: function() {
      # Redirect to login
      window.location.replace("http://yoursite.com/login_page");
    }
  }
});

编辑:全局 ajax 设置

您可以通过使用 ajaxSetup 来全局更改 jQuery 中所有 ajax 请求的这种行为,如下所示:

$.ajaxSetup({
  statusCode: {
    401: function() {
      # Redirect to login
      window.location.replace("http://yoursite.com/login_page");
    }
  }
});

然而 jQuery 文档强烈建议不要使用这种方法,因为这会破坏其他插件等的预期行为。我个人认为在这个例子中会很好,只要确定你做了什么,并且测试一切都按预期工作。你可以在这里阅读更多:http://api.jquery.com/jQuery.ajaxSetup/

【讨论】:

  • 是的。页面上有相当多的ajax请求(前端是用Backbone写的)。 401 是由 devise 渲染的(据我所知),我认为我可以通过调整该 gem 来使其全局化。但似乎我需要找到每个 ajax 请求并添加错误处理?或者我可以制作某种全球性的try/catch??
  • 另外,由于我对设计设置的调整,我成功地发送了重定向以在页面中唱歌。但是,这个操作被取消了……
  • 我已经添加了如何为所有 jQuery ajax 请求全局更改它:)
【解决方案2】:

@jokklan

您的帖子非常有帮助,我确实更改了全局 ajax 设置,似乎工作正常。也只需要发送一个带有 401 代码的响应。

这是我通过自定义 Devise::FailureApp 来管理的

def respond
  # ...
  elsif request.xhr?
    redirect_to some_path, status: 401
  end
  # ...
end

由于控制器响应 json,重定向也发生在 json 中,但通过将状态设置为 401,我能够捕捉到它并将用户重定向到我需要的路径 ajaxSetup

不是最漂亮的,但我愿意接受改进的建议。

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2014-06-25
    • 2021-07-24
    • 2012-08-17
    相关资源
    最近更新 更多