用户控制器未正确应用设计的before_filter authenticate_user

时间:2014-08-26 06:37:34

标签: ruby-on-rails devise

我已明确调用before_filter来在每个控制器操作之前对用户进行身份验证。

class ApplicationController < ActionController::Base
  before_filter :authenticate_user!

class UsersController < Devise::RegistrationsController
    before_filter :authenticate_user!

如果,当我退出时,我尝试访问任何页面,我被重定向到sign_in页面,除非该页面由UsersController呈现。

如果发生这种情况,我将被授予访问该页面的权限,除非我正在访问edit操作。

我不知道为什么authenticate_user!无法在UsersController中工作,而且如果我访问edit,我会更加难以理解为什么它会起作用。

以下是edit中的UsersController(以及其他方法)

class UsersController < Devise::RegistrationsController
  #redirects queries as expected
  def edit
      @user = User.find_by_id(params[:id])
  end

  #Does not redirect queries
  def about
      @user = current_user
  end

是否有人知道如何获得预期的行为(对UsersController中任何操作的所有查询进行重定向?

1 个答案:

答案 0 :(得分:3)

将您的操作添加到控制器prepend_before_filter:

class UsersController < Devise::RegistrationsController
  prepend_before_filter :authenticate_scope!, only: [:edit, :update, :destroy, :about]
  ...