อนุญาตให้ผู้ใช้หลายคนใช้อีเมลเดียวกันด้วย Devise Token Auth

ฉันต้องการที่จะอนุญาตให้สร้างผู้ใช้หลายคนที่มีอีเมลเดียวกันโดยใช้ devise-token-auth .

แทนที่จะเกิดข้อผิดพลาดนี้

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

ฉันคาดหวังว่าการลบ devise :validatable ออกจาก user.rb จะได้ผล แต่ก็ไม่ได้ผล

user.rb

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

ฉันพบคำถาม SO ที่คล้ายกันจากเมื่อหลายปีก่อน แต่ข้อเสนอแนะไม่ได้ผล

ฉันสงสัยว่านี่เป็นปัญหาเกี่ยวกับโทเค็นการรับรองความถูกต้องโดยเฉพาะมากกว่าที่จะประดิษฐ์หรือไม่

มีใครแก้ปัญหานี้มาก่อนหรือไม่?


person tim_xyz    schedule 20.08.2020    source แหล่งที่มา


คำตอบ (1)


จนถึงตอนนี้ฉันพบเพียงวิธีแฮ็กเพื่อบรรลุเป้าหมายนี้เท่านั้น และต้องการแบ่งปัน

เนื่องจากดูเหมือนจะไม่มีวิธีง่ายๆ ในการทำเช่นนี้

ฉันต้องตั้งค่าวิธี 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

ใช้งานได้ แต่ฉันชอบวิธีที่ง่ายกว่านี้ในการบรรลุเป้าหมายนี้

person tim_xyz    schedule 21.08.2020