0

我有有效的身份验证,它通过表用户对用户进行身份验证。

但在这张表中我有布尔字段(“更正”=>真/假)

我如何仅对具有“已更正:true”字段的用户进行身份验证。

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

  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

4

2 回答 2

0

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

于 2013-05-23T06:04:40.223 回答
0

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

  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_authenticable.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

于 2013-06-18T10:25:26.867 回答