-1

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

而不是抛出这个错误。

@details={:email=>[{:error=>:taken, :value=>"testttt@gmail.com"}]}>

我希望devise :validatableuser.rb 中删除会起作用,但事实并非如此。

用户.rb

class User < ActiveRecord::Base
  extend Devise::Models
  include DeviseTokenAuth::Concerns::User
  
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable
end

我从几年前发现这是一个类似的 SO 问题,但这些建议没有奏效。

我想知道这是否特别是设计令牌身份验证问题,而不是设计。

以前有没有人解决过这个问题?

4

1 回答 1

0

到目前为止,我只能找到一种 hacky 方法来实现这一点,并想分享。

鉴于似乎没有一种简单的方法可以做到这一点。

我必须将provider方法设置DeviseTokenAuth::Concerns::ResourceFindernil。默认是硬编码的"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

这行得通,但我喜欢更简单的方法来实现这一点。

于 2020-08-21T19:10:18.250 回答