Rails:在Application Controller中,强制登录,重定向除登录之外的所有请求

And*_*rew 5 redirect ruby-on-rails request applicationcontroller ruby-on-rails-3

我想在我的应用程序控制器中使用一个简单的方法,它要求所有用户在继续访问站点的任何部分之前登录.我正在使用Devise进行身份验证.

我试过了:

class ApplicationController < ActionController::Base
  ...
  unless user_signed_in?
    redirect_to login_path
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

这成功地重定向了所有人,但问题是它还阻止了创建新用户会话所需的发布请求.

所以我的问题是,除了登录视图和登录后请求之外,您将如何阻止所有请求?

pcg*_*g79 9

使用Devise这很容易.您只需要添加before_filter :authenticate_user!到ApplicationController.

这些都在Devise wiki中详细说明 - https://github.com/plataformatec/devise

请注意,在Rails 4.2+中,before_action :authenticate_user!首选.

  • 在大多数情况下,您只需要将该行放入ApplicationController,然后跳过前面的过滤器以获取您想要白名单的操作. (3认同)