设计SessionsController#在返回后创建用户签名

时间:2014-12-15 23:40:38

标签: ruby-on-rails devise

我使用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)会导致行动提前返回,但似乎不是 - 用户仍在登录。我在这里缺少什么?如何根据某些条件阻止用户登录?

1 个答案:

答案 0 :(得分:0)

User模型中,覆盖#active_for_authentication?(取自here

# Devise model
class User < ActiveRecord::Base
  def active_for_authentication?
    activated? && super
  end
end