当前位置: 首页 > 面试题库 >

如何在AJAX中优雅地处理devise的401状态?

董品
2023-03-14
问题内容

通过 设计, 人们before_filter :authenticate_user!只能将访问权限限制为仅通过身份验证的用户。

无论如何,当 未经 身份 验证的 用户尝试访问受限页面时,devise会自动导致重定向到 登录 页面。

因此,尝试打开http:// localhost:3000 / users /
edit
将导致重定向到http:// localhost:3000 / users
/ sign_in

现在,如果我将链接http:// localhost:3000 / users /
edit定义为:remote => true,则devise将仅通过JS 发出
401状态代码

我该如何应对这种情况,并 以非远程变体 的方式覆盖重定向 显示登录对话框?

对于我只需要激活的情况,designes是否提供了默认策略?


问题答案:

这是我现在选择的解决方案(使用CoffeeScript语法):

$ ->
  $("a").bind "ajax:error", (event, jqXHR, ajaxSettings, thrownError) ->
    if jqXHR.status == 401 # thrownError is 'Unauthorized'
      window.location.replace('/users/sign_in')

但是,这(本身)只会忘记用户最初要访问的页面,从而限制了可用性。

需要其他(控制器)逻辑以进行更优雅的处理。

更新:正确的重定向

在函数中,this保留用户打算访问的初始URL。

通过调用window.location.replace(this)而不是显式重定向到登录页面 ),应用程序将尝试将用户重定向到最初预期的目标。

尽管仍然是不可能的(未经授权),但这现在将是GET调用(而不是JS / AJAX)。因此, Devise 可以介入并将用户重定向到登录页面。

从那里开始,Devise照常运行,在成功登录后将用户转发到最初预期的URL。



 类似资料:
  • 我的web应用程序是由对服务器端的大量Ajax调用组成的。每次客户登录我的站点时,登录页面将从服务器获取(JSON Web令牌)令牌,并将其作为存储在客户端。(我选择将其存储为cookie,是因为这是唯一让浏览器自动发送的方式,而且据说比HTML5网页存储更安全)。令牌中有一个字段描述令牌的过期日期。对于每个Ajax调用,都会发送令牌进行身份验证。 但是上面的方法有一个问题:“如何在客户端优雅地处

  • 让我们假设我们有这样一个用java编写的普通守护进程: 我们使用 来守护它,默认情况下,它会在 上发送 (TERM) 信号 假设当前执行的步骤是#2,此时我们正在发送项信号。 发生的情况是执行立即终止。 我发现我可以使用<code>addShutdownHook()</code>处理信号事件,但问题是它仍然会中断当前的执行,并将控制传递给处理程序: 所以,我的问题是——有没有可能不中断当前的执行,

  • 让我们假设我们有这样一个用python编写的琐碎守护进程: 我们使用< code>start-stop-daemon对其进行守护,默认情况下,它会在< code> - stop上发送< code > SIGTERM (< code > TERM )信号。 假设当前执行的步骤是。此时我们正在发送信号。 发生的情况是执行立即终止。 我发现我可以使用<code>signal.signal(signal.

  • 问题内容: 假设我们有一个用python编写的琐碎守护程序: 我们将它守护起来,默认使用它发送信号–。 假设当前执行的步骤是。此时此刻,我们正在发送TERM信号。 发生的情况是执行立即终止。 我发现我可以使用处理信号事件,但事实是它仍然会中断当前执行并将控制权传递给。 因此,我的问题是-是否可以不中断当前执行,而是TERM在单独的线程(?)中处理信号,以便能够进行设置,从而有机会优雅地停止运行?

  • 我最近在我的Spring4/Hibernate Web应用程序中实现了Spring Security来处理登录/退出和不同的用户角色。 经过大量阅读,它现在似乎工作得很好,但我注意到,由于错误的Spring Security配置而引发的异常没有使用我的自定义处理程序进行优雅的处理,而是显示为一个丑陋的Tomcat错误页面(显示HTTP状态500-UserDetailsService是必需的,后跟一

  • 问题内容: 我正在处理一个将文件附加到电子邮件的PHP表单,并试图妥善处理上传的文件太大的情况。 我了解到,其中有两个设置会影响文件上传的最大大小:和。 如果文件的大小超过,PHP会将文件的大小返回为0。我可以检查一下。 但是,如果超出了范围,我的脚本将以静默方式失败并返回空白表格。 有什么办法可以捕捉到此错误? 问题答案: 从文档中: 如果发布数据的大小大于post_max_size,则 $ _