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