我正在使用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的用户
答案 0 :(得分:4)
active_for_authentication?
需要是模型的方法,而不是控制器
(在您的情况下不是问题,但是我的问题)active_for_authentication?
必须是模型上的公开方法
答案 1 :(得分:2)
问题的一部分,我猜测你是否正在使用字符串&#34; deactivated_ind&#34;而不是布尔值。一串&#34; N&#34;和一串&#34; Y&#34;当你尝试将它们用作布尔值时,两者都是真的,因为两者都不是。