在authlogic gem中可能有几个密码吗?

问题描述 投票:0回答:1

现在,我们使用phone_number作为登录名,并使用短信代码(4位数字)作为密码。当用户想要登录时:

- user enters phone number 
- we generate code
- we save code to user password field
- we send code to user via sms
- user uses this sms code to login in

我们希望能够使最后生成的3个代码(密码)对登录有效:

- we started to save generated codes in separate table

这是问题:如何将其连接到authlogic?是否有任何回调可以关闭默认密码检查,并能让我添加用于密码检查的自定义逻辑?

ruby-on-rails ruby authentication authlogic
1个回答
0
投票

我找到了一个解决方案,可以帮助我调整密码验证逻辑。我的authlogic版本3.5.6和以下实现中的方法称为validate_by_password。我复制了它的第一部分以保存空白字段和​​逻辑检查。并以我需要的方式改写了无效的密码检查。

class Client::Session < Authlogic::Session::Base

  ...

  def validate_by_password
    # copy paste from gem
    self.invalid_password = false

    # check for blank fields
    errors.add(login_field, I18n.t('error_messages.login_blank', default: 'cannot be blank')) if send(login_field).blank?
    errors.add(password_field, I18n.t('error_messages.password_blank', default: 'cannot be blank')) if send("protected_#{password_field}").blank?
    return if errors.count > 0

    # check for unknown login
    self.attempted_record = search_for_record(find_by_login_method, send(login_field))
    if attempted_record.blank?
      generalize_credentials_error_messages? ?
        add_general_credentials_error :
        errors.add(login_field, I18n.t('error_messages.login_not_found', default: 'is not valid'))
      return
    end


    # custom check for invalid password
    ...

  end
end
© www.soinside.com 2019 - 2024. All rights reserved.