通过Devise Token Auth允许多个用户使用同一封电子邮件

问题描述

我想允许使用devise-token-auth创建具有相同电子邮件的多个用户

而不是抛出此错误

@details={:email=>[{:error=>:taken,:value=>"[email protected]"}]}>

我希望将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

这可行,但是我希望有一个更简单的方法来实现。