Ruby on Rails: intégration Authlogic Facebook: Lien avec les comptes entrée utilisateur au lieu d'utiliser automatiquement l'adresse e-mail

StackOverflow https://stackoverflow.com/questions/4512277

Question

Je développe une application web en Ruby on Rails. J'utilise authlogic faire l'authentification. Mon site a ses propres connexions, mais j'espère également utiliser Facebook. J'ai essayé authlogic_facebook_connect (en utilisant Facebooker). Après beaucoup de hoquet (les docs ont pas vraiment été entièrement entretenu), j'ai eu authlogic_facebook_connect au travail et il est OK. La valeur par défaut « connexion » comportement fonctionne parfaitement quand je suis confronté avec les utilisateurs qui ont jamais été utilisés par le site avant, mais il en résulte un grand nombre de connexions en double pour les personnes qui utilisent des adresses e-mail différentes pour Facebook et mon site. Voici ce que je veux:

Lorsque l'utilisateur touche le Facebook bouton « Connect » (et après ils passent par l'étape auth Facebook de cliquer sur « Autoriser »), je veux une boîte de pop-up demandant à l'utilisateur si elles veulent se connecter à un pré-existante compte sur mon site ou s'ils veulent avoir un compte généré automatiquement pour eux.

S'ils le veulent généré automatiquement pour eux, nous sommes bons et nous procédons comme d'habitude, mais si - d'autre part - ils veulent lier leur compte Facebook à un compte sur mon site, je veux vraiment les d'entrer dans leurs pouvoirs locaux et trouver le bon compte. En d'autres termes, je ne pas veux que ma solution alors automatiquement les compte ressemble celui de droite, je veux l'utilisateur de le faire.

Y at-il gem / plugin / hack qui me permettra de retirer ceci soit en utilisant authlogic_facebook_connect ou OAuth ou autre chose?

- David

Était-ce utile?

La solution

Quelqu'un d'autre peut être en mesure de vous indiquer le bijou parfait pour cela, mais je peux vous dire que j'ai travaillé sur un problème similaire et ce ne fut pas beaucoup de travail à rouler notre propre, basée sur la perle rare oauth2.

Voici une esquisse du code / flux que j'utilise.

1) L'utilisateur clique sur « Se connecter à Facebook » et cela vous envoie à une action comme celui-ci

def to_facebook
    options = {
      :redirect_uri => facebook_callback_url,
      :scope => "email,publish_stream" # whatever you want to do
    }
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)

    redirect_to client.web_server.authorize_url(options)
end

2) L'utilisateur va vers facebook et vous donne tout l'accès que vous voulez, puis facebook appelle le rappel que vous avez spécifié facebook_callback_url que vous devriez prendre à une action comme ceci:

def facebook_callback
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url)

    do_my_custom_user_association(access_token)
end

Ensuite, vous pouvez spécifier ce que vous voulez dans do_my_custom_user_association, vous devriez avoir une current_user disponible à partir authlogic si quelqu'un est connecté, de sorte que vous pouvez rediriger vers un flux qui permet à l'utilisateur connecté choisir s'ils veulent se fondre dans leur compte courant ou un autre. S'il n'y a pas l'utilisateur actuel, vous pouvez les envoyer à un flux créer compte, avec quelques données facebook ci-joint.

Notez que ceci est juste un croquis, il y a des cas d'erreur à poignée (par exemple facebook_callback sera frappé avec le error_reason param si le get_acccess_token échoue) et je ne vous recommande de faire tout le droit d'interaction oauth2 dans votre contrôleur, mais l'idée de base est là.

Voir http://developers.facebook.com/docs/authentication/ le cas échéant des interactions oauth2 ne font pas de sens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top