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

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

我正在制作一个简单的定额类问题网站,其中登录使用的是devise。我试图使用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)
Controller : def new @question = Question.new(:user=>current_user) respond_to do |format| format.js {} end end
我知道这是因为问题 Controller 中的before_action :authenticate_user!
Network响应中的Chrome控制台还显示“您需要登录或注册才能继续。”

另外,我尝试了byebug,但后来知道流程从未达到新的 Action 。

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

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

最佳答案

这在 Controller 中最容易处理。创建一个名为“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

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

  ...
end

这将在每个“问题 Controller ”操作之前执行该方法。或者,如果您希望任何人都可以查看并说出索引并显示页面,但不显示其他页面,请执行以下操作:
before_action :check_user, except: [:index, :show]

关于jquery - rails 4- 401未经授权的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45168122/

相关文章:

ruby-on-rails - Rails 中的复合主键仍然被忽略

javascript - 从网页获取数据并使用ajax将其发布到服务器是否安全?

javascript - 具有多个实例的 Values 文件 uploader

javascript - 使用easyResponsiveTabs.js时如何解决固定菜单闪烁的问题?

asp.net-mvc - 如何使用 jquery 或 ajax 更新 MVC 项目的 C#/asp.net 中的 razor 部分 View

ruby-on-rails - 为 Rails 应用程序编写 Rack 中间件时,我有哪些存储选项?

ruby-on-rails - 运行 RSpec 测试时出现 NoMethodError

php - 通过选择一个字段自动完成(自动填充)多个字段

javascript - 如何重置此变量?

jquery - 在彼此之间列出元素jquery mobile