如何覆盖Devise session #create方法

时间:2013-05-22 22:11:33

标签: ruby-on-rails devise

我有一个有效的身份验证,可以通过表用户来识别用户。

但是在这张表中我有布尔字段(“correct”=> true / false)

我如何能够对仅具有“已纠正:真实”字段的用户进行认证。

我尝试覆盖方法创建(在此文本下),但我不明白如何准确地做到这一点。

  def create
    self.resource = warden.authenticate!(auth_options)

    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  end

THN!

2 个答案:

答案 0 :(得分:0)

如果要覆盖create操作,则必须按用户名创建单独的控制器并添加要覆盖的操作。为我们生成模型和视图,但没有任何控制器。因此,如果要覆盖任何操作,只需创建控制器并添加操作。

答案 1 :(得分:0)

我只需要添加另一个字段来验证身份验证。 我解决了我的任务: 在Devise我重写方法:

  def self.find_for_authentication(tainted_conditions)
    super(tainted_conditions.reverse_merge(type: 'User'))
  end

最终版本。

  

下一个方法链接 - 在英雄开始会话时使用:

创建: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb#L14

身份验证: https://github.com/plataformatec/devise/blob/master/lib/devise/strategies/database_authenticatable.rb#L7

find_for_database_authentication: https://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb#L135

find_for_authentication: https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L241

find_first_by_auth_conditions: https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L245