「保留中」のアクティベーション ステータスでアカウントにログインしようとしたときにソーサリー ジェムに特定のエラーを表示させるにはどうすればよいですか?
2 に答える
1
彼が書いたgithubリポジトリの問題でそれを行う方法が見つからなくなるまで、それを理解するのにしばらく時間がかかりました 。他の誰かがこの問題を抱えていた場合。
1) config/initializers/sorcery.rb を次のように変更します。
user.prevent_non_active_users_to_login = false
2) ここに示すように、どこかの「ログイン」メソッドを変更または書き直します。
def login(*credentials)
@current_user = nil
if credentials[0].is_a?(user_class)
user = credentials.shift
credentials.unshift(nil, nil)
else
user = user_class.authenticate(*credentials)
end
if user
old_session = session.dup.to_hash
reset_sorcery_session
old_session.each_pair do |k,v|
session[k.to_sym] = v
end
form_authenticity_token
auto_login(user)
after_login!(user, credentials)
current_user
else
after_failed_login!(credentials)
nil
end
end
3) コントローラでは、次のように何かを使用できます。
def create
user = User.authenticate(params[:email], params[:password])
if user
if user.activation_state == 'active'
login(user, params[:remember_me])
redirect_back_or_to root_url, :notice => "Logged in"
else
render :pending
end
else
flash.now.alert = "Email or password was invalid"
render :new
end
end
于 2014-04-28T06:08:22.993 に答える
0
より簡単な方法はconfig/initializers/sorcery.rb
セット
にありますprevent_non_active_users_to_login = false
次に、セッションコントローラーで、または を呼び出すたびにlogin()
、まだアクティブ化されていないユーザーは引き続き認証さ@user.activation_state == 'active'
れ、何をすべきかを決定するためにさらにチェックを行うことができます (別のメッセージを表示してリダイレクトするなど)
于 2015-04-10T19:24:59.290 に答える