设计:可锁定-last_attempt_warning不显示

Joa*_*dyn 4 ruby error-handling ruby-on-rails devise

我试图:lockable按照此Wiki实现我设计的模块,但遇到了一些问题。在开发中,当maximum_attempts多次尝试登录时,该failed_attempts属性会正确更新,并且用户帐户将被锁定,但是:

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

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

config / initializers / 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
Run Code Online (Sandbox Code Playgroud)

型号/user.rb

class User < ApplicationRecord
  devise :database_authenticatable, :confirmable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :lockable
end
Run Code Online (Sandbox Code Playgroud)

视图/设计/会话/新

= 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"
Run Code Online (Sandbox Code Playgroud)

db / migrate / 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
Run Code Online (Sandbox Code Playgroud)

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

Joa*_*dyn 6

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

警告信息不显示

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

config / initializers / devise.rb

config.paranoid = true
Run Code Online (Sandbox Code Playgroud)

如果您查看一下devise模块

如果设置为偏执模式,则不要显示锁定的消息,因为它泄漏了帐户的存在。

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


授权令牌无效

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

希望这对遇到类似问题的人有所帮助。