如何解决通过Devise Token Auth允许多个用户使用同一封电子邮件
我想允许使用devise-token-auth创建具有相同电子邮件的多个用户。
而不是抛出此错误。
@details={:email=>[{:error=>:taken,:value=>"testttt@gmail.com"}]}>
我希望将devise :validatable
b中的user.r
删除是可行的,但是没有成功。
user.rb
class User < ActiveRecord::Base
extend Devise::Models
include DeviseTokenAuth::Concerns::User
devise :database_authenticatable,:registerable,:recoverable,:rememberable,:trackable
end
几年前,我发现它是similar SO question,但建议没有用。
我想知道这是否是一个专门设计令牌而不是专门设计的问题。
有人解决过吗?
解决方法
到目前为止,我只能找到一种骇人听闻的方法来实现这一目标,并希望与大家分享。
鉴于似乎没有简单的方法可以做到这一点。
我不得不将provider
的方法DeviseTokenAuth::Concerns::ResourceFinder
设置为nil
。默认值为硬编码的"email"
。
def provider
nil
end
因此,在build_resource
中调用registrations_controller.rb
时,它不会自动设置provider="email"
。
在没有provider="email"
的情况下,不再引发“电子邮件已被接收”错误。
def build_resource
@resource = resource_class.new(sign_up_params)
@resource.provider = provider
# honor devise configuration for case_insensitive_keys
if resource_class.case_insensitive_keys.include?(:email)
@resource.email = sign_up_params[:email].try(:downcase)
else
@resource.email = sign_up_params[:email]
end
end
但是通过更改上述逻辑,uid
将不再使用用户电子邮件的值进行更新。因此,我在User.rb
上添加了一个回调以进行补偿。
after_initialize do
self.uid = self.email
end
这可行,但是我希望有一个更简单的方法来实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。