设计:可锁定 - last_attempt_warning不显示

时间:2018-06-05 10:41:50

标签: ruby-on-rails ruby error-handling devise

我试图在this wiki之后将:lockable模块实施到我的设计中,但遇到了一些问题。在开发过程中,当登录尝试超过maximum_attempts次时,failed_attempts属性会正确更新,并且用户帐户会被锁定,但是:

1)尽管config.last_attempt_warning = true没有显示警告信息

2)我收到了unlock_instructions封电子邮件,但是当我将链接粘贴到浏览器中时,我收到invalid authorisation token错误。

配置/初始化/ devise.rb

# ==> Configuration for :lockable
config.lock_strategy = :failed_attempts
config.unlock_keys = [:email]
config.unlock_strategy = :email
config.maximum_attempts = 3
config.last_attempt_warning = true

模型/ user.rb

class User < ApplicationRecord
  devise :database_authenticatable, :confirmable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :lockable
end

视图/设计/会话/新

= flash[:alert] if flash[:alert]
= flash[:notice] if flash[:notice]

= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
  .form-inputs
    = f.input :email, required: false, autofocus: true
    = f.input :password, required: false, autocomplete: "off"
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable?
  .form-actions
    = f.button :submit, "Log in"

分贝/迁移/ YYYYMMDDxxx_add_lockable_to_devise.rb

class AddLockableToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :failed_attempts, :integer, default: 0, null: false
    add_column :users, :unlock_token, :string
    add_column :users, :locked_at, :datetime
    add_index :users, :unlock_token, unique: true
  end
end

我没有任何待处理的迁移,也尝试重置数据库并重新启动服务器但没有运气。 关于我做错什么的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:4)

经过大量挖掘,我设法解决了这两个问题:

警告信息未显示

第一个问题是由配置引起的:

<强>配置/初始化/ devise.rb

config.paranoid = true

如果您查看devise module

  

如果设置为偏执模式,请不要显示锁定的消息,因为它   泄露账户的存在。

根据您的安全要求,您可以将此值更改为false或将电子邮件保密,不提供反馈。 如果您有兴趣在登录失败时自定义邮件,我强烈建议您阅读this

无效的授权令牌

第二个问题是由于我直接从电子邮件的源代码复制链接引起的 - 因为=被编码为3D=,链接显然已经破裂。进一步解释here

希望如果他们遇到类似的问题,这会有所帮助。