我使用devise进行身份验证。我想覆盖Devise::SessionsController#create
操作,以防止用户在未激活帐户时登录:
class SessionsController < Devise::SessionsController
before_action :set_user, only: :create
def create
if @user && !@user.activated?
return redirect_to(new_activation_token_path) # prevent the user from logging in
else
super # default behavior
end
end
private
def set_user
@user = (params[:user].blank?) ?
User.new :
User.find_by(email: params[:user][:email])
end
end
我的理解是return redirect_to(some_path)
会导致行动提前返回,但似乎不是 - 用户仍在登录。我在这里缺少什么?如何根据某些条件阻止用户登录?
答案 0 :(得分:0)
在User
模型中,覆盖#active_for_authentication?
(取自here)
# Devise model
class User < ActiveRecord::Base
def active_for_authentication?
activated? && super
end
end