Ich habe eine Anwendung, mit der Benutzer ihre Facebook-Konten verknüpfen können. Sie können sich mit ihrer E-Mail anmelden, aber sie können ihr Facebook-Konto verknüpfen.
In der Ansicht, in der ich die verknüpften sozialen Netzwerke (Facebook und andere) zeige, habe ich so etwas:
%Vor%Dies ruft eine Instanzmethode wie folgt auf:
%Vor%Dies funktioniert gut, wenn das Facebook-Token, das ich in meiner Datenbank gespeichert habe, abgelaufen ist. Also habe ich diesen Exception-Handler in dem erwähnten Controller hinzugefügt:
%Vor%Ich fange die Ausnahme richtig, aber ich sehe nicht, wie ich das Zugriffs-Token, das ich in meiner Datenbank habe, erneuern würde. Beachten Sie, dass das Zugriffstoken, das ich habe, mit OmniAuth eingefügt wurde. Also meine Frage ist:
Wenn ich ein OAuthException
habe, wie kann ich das Zugriffs-Token eines bestimmten Benutzers (UID) mit Omniahuth erneuern?
Der einfache Fall besteht darin, dass Sie den Benutzer mit der FB erneut authentifizieren, genau wie Sie ihn zuvor autorisiert haben. Um das Token an erster Stelle zu bekommen, nehme ich an, dass Sie Omniauth (und Onmiauth-Facebook) verwenden, um sich gegen FB zu authentifizieren. Das bedeutet, Sie haben eine Route und eine Controller-Aktion, um den Auth-Callback zu verarbeiten, und eine Funktion, die das Token in die Datenbank einfügt.
Das Zugriffstoken, das Sie ursprünglich mit omniauth erhalten haben, kann aus verschiedenen Gründen ungültig werden - Verfall oder weil der Benutzer sein FB-Passwort geändert hat und möglicherweise andere. In diesen Fällen gibt ein anderer OAuth-Aufruf ein gültiges Token zurück. Rufen Sie einfach erneut an (wie Sie es getan haben, als Sie den Benutzer zum ersten Mal autorisiert haben) und ersetzen Sie das ungültige Token durch das neue in Ihrer Datenbank, und Sie sind gut.
Dieser Kern ( meine eigene Antwort zu einer verwandten Frage, die ich hier gestellt habe) hat einen Code, der das abdeckt, aber es hört sich so an, als hättest du das schon gedeckt. Speichere genug Status, um dann erneut zu versuchen, was auch immer die Ausnahme ausgelöst hat und du bist gut.
Es ist auch möglich, dass das Token jetzt ungültig ist, weil der Benutzer seine FB-App-Einstellungen geändert hat, um die App zu deaktivieren. In diesem Fall sieht der Benutzer das Dialogfeld "FB-Berechtigungen" so, als ob er ein neuer Benutzer wäre, der sich zum ersten Mal gegenüber dem FB authentifiziert. ( FB )
Macht das Sinn?
Tags und Links ruby-on-rails facebook access-token omniauth koala