Railsで会員機能を実装するのによく使うgemのDeviseですが、
個人的にサービス作るなら最低限これくらいの設定はしておいて欲しいなぁと思う。
簡単に設定できて手軽にセキュリティレベル上げれるので、
可用性が下がらない範囲で調整して導入して欲しいです。
##ロック条件の有効化(時間でのみ解除の場合)
deviseのマイグレーションファイルのコメント部分を調整します。
コメントに使用方法なども書いているので、
要件に合わせて使い分けるのが良いでしょう。
今回は時間でのみ解除するので下記のようにしておきます。
※メールで解除用のトークン送ったりする場合トークン部分もいります。
db/migrate/20150416180122_devise_create_users.rb
## Lockable
t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
t.datetime :locked_at
# add_index :users, :unlock_token, unique: true
User(該当モデル)に devise
の :lockable
を追加します。
app/models/user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:lockable
end
##ロック条件の詳細設定
Deviseの設定ファイルにロック内容を設定します。
設定方法の詳細(パターン)はコメントアウトされてるので読んだら大体分かります。
config/initializers/devise.rb
config.lock_strategy = :failed_attempts # 一定回数ログインミスでロック
config.unlock_strategy = :time # ロック解除条件は時間経過のみ
config.maximum_attempts = 10 # 10回連続ミスでロック
config.unlock_in = 1.hour # 1時間ロック継続
config.last_attempt_warning = false # あと1回ミスしてロックされる時に警告を出さない
ね、簡単でしょ?