【问题标题】:rails 4- 401 Unauthorized error handlingrails 4- 401 未经授权的错误处理
【发布时间】:2017-12-23 09:37:10
【问题描述】:

我正在制作一个简单的问答网站,其中登录正在使用设计。我试图使用 ajax 在问题索引本身中呈现表单。一切似乎都工作正常,除了当没有用户登录服务器说 401 未授权完成并且似乎没有任何事情发生。 控制台响应:

Started GET "/questions/new" for 127.0.0.1 at 2017-07-18 18:30:54 +0530 Processing by QuestionsController#new as JS Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

控制器: def new @question = Question.new(:user=>current_user) respond_to do |format| format.js {} end end

我知道这一点是因为问题控制器中的 before_action :authenticate_user!。 网络响应中的 Chrome 控制台还显示“您需要先登录或注册才能继续。”

另外,我尝试过 byebug,但发现流程永远不会到达新操作。

我想知道如何处理这个错误。在页面顶部显示我需要登录或注册为通知或警报,或重定向到登录页面。

编辑:我使用remote: true 来调用ajax。在索引页面上的新问题链接中。

【问题讨论】:

    标签: jquery ruby-on-rails ajax error-handling devise


    【解决方案1】:

    这是在控制器中最容易处理的。创建一个名为“check_user”的方法:

    def check_user
      return if user_signed_in?
      redirect_to new_user_session_path, error: 'You must log on to view this part of the site'
    end
    

    然后我们可以决定要为每个控制器的用户检查哪些页面。如果您想限制用户的每个问题页面,那么只需执行以下操作:

    class QuestionsController < ApplicationController
      before_action :check_user
    
      ...
    end
    

    这将在每个问题控制器操作之前执行该方法。或者,如果您希望任何人都能够查看索引和显示页面,但不能查看其他任何人:

    before_action :check_user, except: [:index, :show]
    

    【讨论】:

    • 我理解您的回答并应用了相同的答案,但似乎由于 remote: true 用户不会重定向到其他页面。在控制台网络中,它显示新并登录,但页面不会重定向到其他地方。
    • 我删除了 remote: true 然后点击了新问题链接,我能够重定向到登录页面。
    • @SaumyaWardhan 具有远程 true,也就是 ajax 请求,最好期待一些 json 状态作为响应,然后根据该状态进行重定向。否则,对 json 响应进行服务器重定向不是一个好习惯。
    • @zauzaj 我刚开始使用 rails ajax,不知道该怎么做,如果流程从未达到控制器操作,我将如何以 json 格式发送响应?
    【解决方案2】:

    @Mark 让您知道如何在控制器上实现授权,但我看到您在这里使用 json 响应,因此服务器重定向可能不是这里的好选择。

    def new
      @question = Question.new(:user=>current_user)
      respond_to do |format|
        format.js {
          body: {}, status: authorized? ? 200 : 401
        }
      end
    end
    

    然后,根据您在客户端收到的状态,您可以轻松进行重定向。

    【讨论】:

    • 是否应该在设备验证之前删除新操作?
    • 如果您仅将此操作用于 ajax,那么您不需要 before 操作!
    • 我用它来重定向到
    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多