Jquery rails 4-401未经授权的错误处理

Jquery rails 4-401未经授权的错误处理,jquery,ruby-on-rails,ajax,error-handling,devise,Jquery,Ruby On Rails,Ajax,Error Handling,Devise,我正在制作一个简单的类似quora的问答网站,登录时使用Desive。我试图使用ajax在问题索引本身中呈现表单。一切似乎都很正常,只是当没有用户登录服务器时,服务器显示401未经授权已完成,似乎什么也没有发生。 控制台响应: 2017年7月18日18:30:54+0530开始获取127.0.0.1版的“问题/新” 问题控制员处理#新为JS 在1ms内完成401次未授权(ActiveRecord:0.0ms) 控制器: def新 @问题=问题。新(:user=>当前用户) 回应待办事项|格式|

我正在制作一个简单的类似quora的问答网站,登录时使用Desive。我试图使用ajax在问题索引本身中呈现表单。一切似乎都很正常,只是当没有用户登录服务器时,服务器显示401未经授权已完成,似乎什么也没有发生。 控制台响应:

2017年7月18日18:30:54+0530开始获取127.0.0.1版的“问题/新” 问题控制员处理#新为JS 在1ms内完成401次未授权(ActiveRecord:0.0ms)

控制器:

def新
@问题=问题。新(:user=>当前用户)
回应待办事项|格式|
format.js{}
终止
结束

我之所以知道这一点,是因为之前的操作
:authenticate\u user。
网络响应中的Chrome控制台还表示“在继续之前,您需要登录或注册。”

此外,我还尝试了byebug,但后来知道流永远不会到达新动作

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


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

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

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

class QuestionsController < ApplicationController
  before_action :check_user

  ...
end

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

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

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

我理解你的答案,并应用了相同的,但似乎因为远程:真正的用户不会重定向到其他页面。在控制台网络中,它显示“新建”和“登录”,但页面不会重定向到其他地方。我删除了remote:true,然后单击“新建问题”链接,我可以重定向到登录页面。@SaumyaWardhan对于remote true,又称ajax请求,最好期望响应中出现一些json状态,然后根据该状态执行重定向。否则,对json响应执行服务器重定向是不好的做法。@zauzaj我刚开始使用rails ajax,不确定如何执行,如果流从未到达控制器操作,我将如何以json的形式发送响应?应该在验证Desive之前删除新操作吗?如果您仅对ajax使用此操作,那么您可以不需要在行动之前!我用它来引导你
before_action :check_user, except: [:index, :show]
def new
  @question = Question.new(:user=>current_user)
  respond_to do |format|
    format.js {
      body: {}, status: authorized? ? 200 : 401
    }
  end
end