Ich benutze Rails 4.2.5 mit dem Juwel "Omniauth-google-oauth2". In meiner Anwendung können Nutzer sich nur über ihre Google- oder Facebook-Logins anmelden. Was ich möchte ist, meine Anwendung mit einem ersten Benutzer, mir (email = '[email protected] "), mit der Administratorrolle vorzubelegen. Es wäre schön, dies programmatisch zu tun, so dass ich denselben Code verwenden kann, wenn ich dies in andere Umgebungen einbringe.Wie befülle ich meine Rails 4-Anwendung mit einem Google-Nutzer?
Meine Rollen Tabelle (durch db/seeds.rb) hat die Rollen
Admin
User
und meine app/Modell/user.rb Datei hat
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
Ich bin nicht sicher, wie man tun, was ich will, und würde daher einen Ratschlag wertschätzen.
Hallo, das ist in Ordnung, wenn ein Benutzer nicht gleichzeitig in Google und Facebook und in meiner App eingeloggt sein kann. Ich bin verwirrt darüber, warum Sie das self.from_omniauth vom Benutzermodell in das Autorisierungsmodell verschoben haben.Werden so doppelte Benutzer nicht erstellt, wenn meine Datenbank bereits einen Benutzer enthält, der mit dem Provider und der Benutzerkennung übereinstimmt? – Dave
@Dave Ja, der Zweck des Autorisierungsmodells besteht darin, mehrere Anbieter für denselben Benutzer zu unterstützen. Ohne diesen (aus Ihrem Code) wird ein Benutzer zweimal erstellt, wenn er sich bei Facebook und Google anmeldet. Es ist kein großes Problem, aber wenn Sie auch E-Mails vom Provider abrufen und diese in der Benutzer-Tabelle speichern, während Sie E-Mails als Login-ID haben, führt dies ebenfalls zu Problemen. –