Mit Rails 5, versuche ich Omniahuth-Facebook und Clearance für Benutzer-Authentifizierung zu implementieren.Stop-Assoziationen von Validierung in Rails 5
Hinweis: Mein Code ist genau wie this Gist
ich es meistens bekommen habe zu arbeiten. Wenn Sie jedoch Facebook zur Registrierung verwenden (dh ein Benutzer hat die Website nie besucht), gibt Rails die Fehlermeldung Validation failed: User must exist
aus. Ich habe das Problem auf diesen Block in dem Gist verengt:
def self.create_with_omniauth(auth_hash)
create! do |auth|
auth.provider = auth_hash["provider"]
auth.uid = auth_hash["uid"]
auth.token = auth_hash["credentials"]["token"]
end
end
Wenn er trifft, dass es versucht, create!
ohne auth.user
Objekt vorhanden ist, und schlägt fehl. Hier ist der relevante Code aus dem sessions
Controller:
#-- Spectically, the line below
authentication = Authentication.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"]) || Authentication.create_with_omniauth(auth_hash)
#-- More code, for context
if authentication.user
user = authentication.user
authentication.update_token(auth_hash)
@next = root_url
@notice = "Signed in!"
else
user = User.create_with_auth_and_hash(authentication,auth_hash)
@next = edit_user_path(user)
@notice = "User created - confirm or edit details..."
end
Das einzige, was ich aus dem Gist bin fehlt, ist die Struktur seiner Authentications
Tisch. Mit Hilfe der Kontext Hinweise fand ich, habe ich diese Tabelle:
def change
create_table :authentications do |t|
t.string :provider
t.string :uid
t.string :token
t.references :user, foreign_key: true
t.timestamps
end
end
Wenn mehr Informationen benötigt werden, werde ich das, was ich kann