我试图在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
我没有任何待处理的迁移,也尝试重置数据库并重新启动服务器但没有运气。 关于我做错什么的任何想法?提前谢谢。
答案 0 :(得分:4)
经过大量挖掘,我设法解决了这两个问题:
第一个问题是由配置引起的:
<强>配置/初始化/ devise.rb 强>
config.paranoid = true
如果您查看devise module:
如果设置为偏执模式,请不要显示锁定的消息,因为它 泄露账户的存在。
根据您的安全要求,您可以将此值更改为false
或将电子邮件保密,不提供反馈。
如果您有兴趣在登录失败时自定义邮件,我强烈建议您阅读this。
第二个问题是由于我直接从电子邮件的源代码复制链接引起的 - 因为=
被编码为3D=
,链接显然已经破裂。进一步解释here。
希望如果他们遇到类似的问题,这会有所帮助。