私はdeviseを使用して、trueまたはfalseの:activeという名前のユーザーフィールドを作成しました。ユーザーにログインを許可する前に、ユーザーを手動でアクティブ(true)にする必要があります。少なくともそれが目的です。私はこれを試しました...
class SessionsController < Devise::SessionsController
# POST /resource/sign_in
def create
"resource/signin CREATE"
self.resource = warden.authenticate!(auth_options)
unless resource.active?
sign_out
redirect_to :sorry_not_active_url
return
end
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
end
ただし、これは、ユーザーがログインできるすべての場所をキャッチするわけではありません。たとえば、ユーザーがパスワードを変更すると、サイトはその後自動的にログインします。ただし、ユーザーがアクティブでない場合は、ログインを許可せず、sorry_not_active_urlにリダイレクトするようにします。
ユーザーがアクティブでない場合、ユーザーがサインインできないようにする最善の方法は何ですか?
ありがとうございました。
これら2つのメソッドをユーザーモデルに追加すると、deviseが自動的にそれらを取得するはずです。Devise::SessionsController
を拡張する必要はありません。
def active_for_authentication?
super && self.your_method_for_checking_active # i.e. super && self.is_active
end
def inactive_message
"Sorry, this account has been deactivated."
end
Devise(devise 3.2+を使用している場合)が block
パラメータを(セッション)createでサポートするようになりました
# assuming this is your session controller
class SessionsController < Devise::SessionsController
def create
super do |resource|
unless resource.active?
sign_out
# you can set flash message as well.
redirect_to :sorry_not_active_url
return
end
end
end