5

我正在尝试添加一个非常简单的策略来设计,但它似乎不起作用。这是我尝试使用的代码

#config/initializers/devise.rb
Devise.setup do |config|
  config.orm = :mongo_mapper

  config.warden do |manager|
    manager.strategies.add(:auto_login_strategy) do 
      def valid?
        params[:auto_login]
      end

      def authenticate!
        u = User.find(:first)
        u.nil? ? fail!("No created users") : success!(u)
      end
    end
    manager.default_strategies(:scope=>:user).unshift :auto_login_strategy
  end  
end

该代码应该检查“auto_login”参数的参数,如果存在,请找到它可以找到的第一个用户并登录。我完全跳过了安全措施,只是为了让一个基本的测试用例正常工作。当我尝试登录到具有before_filter authenticate_user!(ie localhost:3000/test?auto_login=true) 的控制器时,它无法让我登录并将我重定向到登录页面。我究竟做错了什么?

4

1 回答 1

6

您可能想尝试将其直接添加到 Warden::Strategies:

class MyStrategy
  def valid?...
  def authenticate!...
end

Warden::Strategies.add(:database_authenticatable, MyStrategy)

我前一阵子这样做了,但最终不需要它。让我知道我是否记错了。

于 2011-02-03T15:06:08.343 回答