尝试以“待定”激活状态登录帐户时,如何使魔法宝石显示特定错误?
问问题
502 次
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
set
prevent_non_active_users_to_login = false
然后在您的会话控制器中,或每当您调用时login()
,尚未激活的用户仍将通过身份验证,您可以进一步检查@user.activation_state == 'active'
以决定要做什么(显示不同的消息和重定向等)
于 2015-04-10T19:24:59.290 回答