Erste (omniauth-facebook) und (omniauth-twitter) arbeiten
Ich bin mit:
- Ruby on Rails 4
- entwickeln 3.0.3
- omniauth (1.1.4)
- omniauth-facebook (1.4.1)
- omniauth-twitter (1.0.0)
Ich vor kurzem meine omniauth-facebook
und alles funktioniert einwandfrei. Jetzt möchte ich hinzufügen omniauth-twitter
aber irgendwie bin ich Durcheinander zu bringen, ziemlich schlecht.
1.) Auf meine Omniauth-Facebook
ich Tat dies (in aller Kürze):
gem 'omniauth'
gem 'omniauth-facebook'
2.) Hinzugefügt die Spalten "provider
" und "uid
" auf meine Benutzer-Modell.
3.) Weiter, als ich erklärte, dass der Anbieter in meiner config/Initialisierungen/entwickeln.rb:
require "omniauth-facebook"
config.omniauth :facebook, "App_ID", "App_Secret",
{:scope => 'email,offline_access',
:client_options => {:ssl => {:ca_file => 'lib/assets/cacert.pem'}},
:strategy_class => OmniAuth::Strategies::Facebook}
4.) Ich bearbeitet meine Modell-Benutzer.rb
# Facebook Settings
def self.find_for_facebook_oauth(auth, signed_in_resource = nil)
user = User.where(provider: auth.provider, uid: auth.uid).first
if user.present?
user
else
user = User.create(first_name:auth.extra.raw_info.first_name,
last_name:auth.extra.raw_info.last_name,
facebook_link:auth.extra.raw_info.link,
user_name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20])
end
end
Hinzugefügt und die Attribute zu entwickeln:
:omniauth_providers => [:facebook]
5.) Ich bearbeitet die Routen:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
ENDE
Obwohl dies funktionierte perfekt für Facebook, ich habe schon seit Stunden versucht Sie jetzt, um diese arbeiten für Twitter, und ich kann Sie nicht einfach es herauszufinden.
Wenn jemand, der Erfahrung hat, in diesem, oder einfach nur die Lösung weiß, könnte mir helfen, dies einzurichten wäre ich sehr dankbar 🙂
Danke Jungs, und sorry für den langen Post.
Zusätzlich
Twitter keine :E-Mail-Attribut, so habe ich zu teilen auf meine Benutzer-Registrierung Prozess, den ich denke ?
Meine Twitter Aktion in meinem - User-Modell
# Twitter Settings
def self.find_for_twitter_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth[:provider], :uid => auth[:uid]).first
unless user
user = User.create(:first_name => auth[:name],
:user_name => auth[:screen_name],
:provider => auth[:provider], :uid => auth[:uid],
:password => Devise.friendly_token[0,20]
)
end
user
end
# build auth cookie hash for twitter
def self.build_twitter_auth_cookie_hash data
{
:provider => data.provider, :uid => data.uid.to_i,
:access_token => data.credentials.token, :access_secret => data.credentials.secret,
:first_name => data.name, :user_name => data.screen_name,
}
end
Hatte ich zum migrieren einer rückmeldefähigen für Benutzer -> Gewusst wie: Hinzufügen :diejenigen die den Benutzern
Meine Form, das Problem, (Zumindest im bekommen dieser poing jetzt 🙂 )
- Es hilft immer, wenn Sie erklären, und/oder-Anzeige, die tatsächlichen Fehler, die Sie erhalten. Und, ein langer post ist kein problem. Je mehr Informationen, desto besser. Verkaufen ist eigentlich kürzer als viele.
- setzen Sie die
devise.rb
- code für twitter - Sie brauchen nicht gem omniauth, wenn Sie die andere.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um Ihr problem zu beheben mit der E-Mail könnten Sie setzen Sie einfach ein dummy-E-mail, oder fügen Sie eine zweite Schritt, wo der Benutzer fügt seine/Ihre E-Mail.
Dummy-E-mail:
Oder der zweite Schritt option:
Ändern Sie Ihre controller eine Umleitung zu einem E-Mail hinzufügen Schritt, wenn der Anbieter von twitter und der E-Mail ist leer. Vielleicht müssen Sie auch ändern Sie Ihre Validierungen zu ermöglichen, E-Mail leer erstellen, wenn der Anbieter ist twitter.
UPDATE: ich habe es wie folgt aus:
Gemfile:
Verwendet habe ich:
Wenn Sie verschiedene Versionen, vielleicht müssen ein paar Dinge ändern..
Routen.rb:
app/models/user.rb
app/Controller/users/omniauth_callbacks_controller.rb
app/views/users/omniauth_callbacks/add_email.html-Code.erb
app/Controller/users/accounts_controller.rb
Haben Sie vielleicht zu ändern, das eine oder andere Teil von meiner Lösung..man könnte auch die Umgestaltung der beiden Methoden in der user-Modell (find_for_facebook_auth, find_for_twitter_auth) arbeiten mit einer dynamischen Methode. Probieren Sie es aus und lassen Sie mich wissen, wenn Sie immer noch Probleme haben. Wenn Sie irgendwelche Tippfehler, bitte teilen Sie mir auch mit.. Auch sollte man tests schreiben, um zu überprüfen, was in Ihrem system.
Fügen Sie diese in gem-Datei
tun bundle und starten Sie den server neu
nach diesem fügen Sie Ihre app_id und secret-key in der Konfiguration/Initialisierung/entwickeln.rb
Bearbeiten Sie Ihre Benutzer-Modell
Hinzufügen neuer controller-Datei in
Ende
Fügen Sie diesen link in Ihre view-Datei
Nötigen änderungen in der Benutzer-Modell als twitter nicht zurück Benutzers E-Mail-id:
Erstellen Sie eine migration-Datei, um die null-Werte zulassen Benutzers E-Mail-Spalte:
nach dieser müssen Sie auch überschreiben, Benutzer-Modell-Validierungen, so fügen Sie diesen Benutzer.rb
Hinweis: Vor der Durchführung sollte man erstellen Sie Ihre app auf twitter und geben Sie die richtige callback-Pfad. Ihr ist wichtig, da nach der Authentifizierung von twitter auf den controller kommen wieder auf den Weg, die Sie in Ihrer app auf twitter.
lassen Sie mich wissen, wenn Sie irgendein problem haben.
The Mini John
ich backtraced das Problem. gleiche Problem hatte ich gegenüber früher wesentliche Ursache dafür ist, dass Twitter nicht über die der Benutzer wieder E-Mail-id (Punkt-zu beachten) Ihrer twitter-Politik die api ist so konzipiert, zu tun, und in unserer entwerfen user-Modell-E-Mail ist Pflichtfeld. Ich bin eine Aktualisierung meiner Antwort nach zu es so check it outMattherick's
Sie können dummy-E-Mail. Nachdem Sie dies getan haben, wenn die Steuerung kehrt zu Ihrer Website können Sie den Benutzer auffordern, die Eingabe seiner/Ihrer email_id von twitter, aber Sie können nicht überprüfen, ob die gleiche email_id ist für twitter-anmelden oder nicht.Mattherick hat eine gute Lösung für die E-Mail, aber ich konnte nicht die before_create zu arbeiten. Ein Rückruf nicht spielen schön mit bedingten if-Anweisungen, weil alles nach dem Komma soll ein options-hash. Daher:
Knallte mir Fehler.
Diese, wie ich fest das:
Diese werden nur eine E-Mail, wenn man nicht durch den Anbieter (sprich: Twitter).
Und dann für eine weitere "Universelle" Möglichkeit der Einstellung von Parametern (so brauchen Sie nicht eine einzigartige Strategie: