active_for_authentication?不工作

时间:2014-11-11 07:00:48

标签: ruby-on-rails ruby-on-rails-3 devise devise-confirmable

我正在使用active_for_authentication?仅允许活动用户通过设计登录。 但它不起作用。

我的控制器:

class DashboardUsersController < ApplicationController
def active_for_authentication?
  super && self.deactivated_ind
end

def inactive_message
  "Sorry, this account has been deactivated."
end

我的模特:

class DashboardUser < ActiveRecord::Base

  devise :database_authenticatable,:rememberable, :trackable, :validatable, :timeoutable

  attr_accessor :login

  def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first
    else
      where(conditions).first
    end
  end
end

我的用户表:

t.string   "deactivated_ind",      limit: 1
t.date     "deactivated_date"

通过使用deactivated_ind Y / N i,检查用户是否处于活动/非活动状态。 现在我想让allow devise只登录那些在deactivated_ind colomn中有N的用户

2 个答案:

答案 0 :(得分:4)

  1. active_for_authentication?需要是模型的方法,而不是控制器

  2. (在您的情况下不是问题,但是我的问题)active_for_authentication?必须是模型上的公开方法

答案 1 :(得分:2)

问题的一部分,我猜测你是否正在使用字符串&#34; deactivated_ind&#34;而不是布尔值。一串&#34; N&#34;和一串&#34; Y&#34;当你尝试将它们用作布尔值时,两者都是真的,因为两者都不是。