[英]Remove devise email validation
我使用devise和devise-token-auth。 我有以下内容的用户模型
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]
include DeviseTokenAuth::Concerns::User
validates_uniqueness_of :login
validates_presence_of :full_name
protected
def email_required?
puts "email_required called"
false
end
end
但是设计电子邮件验证仍然有效
2.3.0 :003 > user = User.new(login: "hello", password: "11111111", password_confirmation: "11111111", full_name: "hello world")
=> #<User id: nil, provider: "email", uid: "", email: nil, full_name: "hello world", login: "hello", created_at: nil, updated_at: nil>
2.3.0 :004 > user.valid?
email_required? called #<===== my method is called!
(3.7ms) SELECT COUNT(*) FROM "users" WHERE "users"."provider" = $1 AND "users"."email" IS NULL [["provider", "email"]]
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."login" = $1 LIMIT $2 [["login", "hello"], ["LIMIT", 1]]
=> false
2.3.0 :005 > user.errors
=> #<ActiveModel::Errors:0x000000028e2338 @messages={:email=>[...]}, @details={:email=>[{:error=>:blank}]}>
为什么这个? 谢谢
您的验证不会覆盖Devise验证,而只是扩展它们。 如果您确实要删除Devise验证,则可以删除:validatable模块。 但是您也将丢失所有漂亮的验证(例如,在密码上)。
或者,也许首先尝试执行此操作:(我没有对此进行测试) :authentication_keys => {email: false, login: true}
如果您只想删除电子邮件验证。 将用户模型编辑为
devise :database_authenticatable, :registerable,:recoverable, :rememberable,
:trackable, :validatable, authentication_keys: [:password]
如果您完全想删除验证。 从用户模型中删除可验证的 。
就我而言,我更改为用户名字段。 首先,我更改了/config/initializers/devise.rb
> config.authentication_keys = [:username]
而且,当我使用旧数据库时,我也必须将主键也更改为用户名,并更改auth
方法。
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
login = conditions.delete(:username)
where(["APP_NAME = '#{$app_name.downcase}' AND USERNAME = :value", { :value => login }]).first
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.