When I test with rspec, below WARNING is displayed everytime.
DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :email attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator. (called from block (2 levels) in <main> at /usr/src/app/spec/models/user_spec.rb:6)
So I tried to write this to User.rb(I expect case insensitive).
validates:email, uniqueness: { case_sensitive: false }
But, the WARNING can't be erased.
Next, I checked devise.rb(because I used devise and devise_token_auth). In devise.rb, it was written about case_insensitive.
config.case_insensitive_keys = [:email]
For your reference...
User.rb
# frozen_string_literal: true
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
include DeviseTokenAuth::Concerns::User
has_many :schedules
validates :name, presence: true, length: { maximum: 10 }
validates :email, uniqueness: { case_sensitive: false }
end
devise.rb
Devise.setup do |config|
config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
require 'devise/orm/active_record'
config.case_insensitive_keys = [:email]
config.strip_whitespace_keys = [:email]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 11
config.reconfirmable = true
config.expire_all_remember_me_on_sign_out = true
config.password_length = 6..128
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
config.reset_password_within = 6.hours
config.sign_out_via = :delete
end
Why rails don't stop WARNING?
thanks for your help.
You shuld be able to change in your User.rb
#User.rb
class User < ActiveRecord::Base
...
# From
validates :email, uniqueness: { case_sensitive: false }
# To
validates_uniqueness_of :email, case_sensitive: true
end
I found this warning is caused by devise_token_auth gem.
So I changed setting in config/initializers/devise_token_auth.rb
config.default_callbacks = false
But after this change, all email validation by devise is disabled. So I decided to hide WARNING with below in config/application.rb
ActiveSupport::Deprecation.silenced = true if Rails.version == '6.0.2.2'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.