using omniauth für Facebook Login mit nur Zugriffstoken

8

Ich erstelle eine API in Schienen für die mobile Anwendung. Jetzt meldet sich der Benutzer mit Facebook an und ich erhalte den Zugriffstoken nach der Facebook-Authentifizierung. Ich muss dieses Zugriffstoken nehmen und prüfen, ob das Zugriffstoken in der Anwendungsdatenbank existiert. Wenn dies der Fall ist, erlauben Sie den Benutzerzugriff, wenn nicht, dann prüfen Sie auf E-Mail und aktualisieren Sie das Zugriffstoken und erlauben Sie den Benutzerzugriff.

Wie mache ich das mit omniauth-facebook und devise, soweit ich Omniauth-facebook alles von Grund auf sehen kann, kann ich keinen Weg finden, nur Zugriffsmarker auf omniauth-facebook zu stellen.

Jede Art von Hilfe wäre großartig.

    
abhilash 11.02.2013, 12:43
quelle

1 Antwort

14

Sie brauchen nicht omniauth-facebook. Der Zweck dieses Edelsteins besteht lediglich darin, ein Zugriffstoken zu erhalten (und die Informationen des Benutzers abzufragen). So geschieht es in einem Standard-Setup (mit Devise und omniauth-facebook):

  • Omniauth erhält ein Zugriffs-Token
  • Omniauth ruft die Informationen des Nutzers über die Facebook-API ab und speichert sie in der Umgebung der Anfrage
  • Omniahuth ruft eine benutzerdefinierte Rückrufmethode in Ihrer Anwendung auf, die Sie schreiben müssen
  • Diese Rückrufmethode ruft den Benutzer in der Datenbank ab oder erstellt ihn und verwendet dann einige von Devise bereitgestellte Helfer, um den Benutzer zu unterschreiben.

(siehe Devise's Dokumentation über Omniauth für weitere Details)

Nun, da Sie bereits ein Zugriffs-Token haben und das Abrufen der Benutzerinformationen aus Facebooks API sehr einfach ist, brauchen Sie omniauth-facebook nicht wirklich.

Alles was Sie tun müssen, ist eine Aktion zu schreiben:

  • empfängt das Zugriffstoken (als Parameter)
  • holt die Benutzerinformationen (eine Graph-API-Anfrage an / me ) )
  • finde oder erstelle den Benutzer in der Datenbank (mit der Facebook-ID des Benutzers)
  • Unterschreiben Sie den Benutzer mit den Helfern von Devise

Dieser Code basiert auf dem Beispiel in Dokumentation von Devise .

%Vor%

Hinweise:

  • Ich verwende hier das HTTParty-Juwel , um die Facebook-API aufzurufen, aber es gibt noch andere Möglichkeiten, einschließlich Koala
  • sign_in_and_redirect , set_flash_message und is_navigational_format? sind Helfer, die von Devise
  • zur Verfügung gestellt werden
  • Informationen zur Implementierung von User.find_for_facebook_oauth finden Sie in der Dokumentation von Devise .
  • Ein Juwel namens devise_facebook_open_graph macht dasselbe auf eine etwas andere Art und Weise. Es wird nicht wirklich verwendet oder gewartet, aber Sie könnten von der Implementierung interessiert sein.
Grégoire Clermont 02.06.2014 18:03
quelle