2016-06-20 6 views
0

Ich habe Devise eingerichtet, damit sich ein Benutzer bei E-Mail registrieren kann. Jetzt habe ich ein Login über LinkedIn mit Omniauth aufgenommen. Deshalb musste ich sowohl den Provider als auch die Benutzerliste in der Benutzertabelle speichern.E-Mail-Anmeldung und OAuth-Anmeldung - wie Sie es mit Devise on Rails einrichten

Das Problem, das ich jetzt habe, ist, dass die Kombination von Anbieter und UID einzigartig sein sollte. Aber wenn ein Benutzer entscheidet, sich mit E-Mail zu registrieren, habe ich keine Werte für Provider und UID. Wie kann ich mit diesem Problem gut umgehen?

Ich bin neu bei Rails und habe keine anderen Antworten darauf gefunden.

Vielen Dank!

Antwort

0

ich wahrscheinlich in manual im Provider füllen würde und eine uid mit SecureRandom.uuid zu erzeugen.

Sie könnten dies in Ihrem User Modell mit einem before_validation Haken tun.

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    before_validation(on: :create) do 
    if self.provider.nil? 
     self.provider = 'manual' 
     self.uid = SecureRandom.uuid 
    end 
    end 

... 

end 

Sie könnten auch in den Controller einhaken, der den Benutzer erstellt.

Wenn Sie die UID benötigen, um zu verhindern, dass sich ein Benutzer zweimal mit der gleichen E-Mail anmeldet, würde ich einen Hash der Hash-Adresse der E-Mail verwenden.

+0

Vielen Dank! Ich werde das versuchen! –

+0

Ich habe es jetzt funktioniert. Ich musste dem Anmeldeformular versteckte Felder hinzufügen, damit die create-Aktion die Parameter provider und uid enthält. Aber Ihre bereitgestellte Lösung hat wie Charme funktioniert! Danke vielmals! –

Verwandte Themen