2011-03-01 5 views
7

Je construis une application web utilisant des rails 3. J'ai ma propre connexion, connexion et authentification, et je cherche à ajouter une implémentation Oauth 2 pour que les gens puissent se connecter avec Facebook et se connecter/inscription avec moins d'étapes.modéliser les utilisateurs avec Oauth 2

J'ai les débuts de cette opération avec succès. Jusqu'à présent, je peux obtenir facebook pour authentifier les utilisateurs et me donner la permission d'accéder à leurs informations. Je n'ai pas encore essayé de configurer Twitter mais je suppose que cela fonctionnerait de la même manière. Ce que je réfléchis maintenant, c'est comment l'intégrer dans mon modèle d'utilisateur existant qui consiste essentiellement en un tableau d'utilisateurs qui ont des emails, des noms et des mots de passe.

Dois-je laisser ma table d'utilisateurs comme il est et mettre en place une table de fournisseurs d'accès:

id | user_id | provider_id | access_key 
--------------------------------------- 
1 | 4 |  1  | xyz 
2 | 4 |  2  | pqr 
3 | 7 |  1  | dfr 

et permet de dire une table « Utilisateurs Facebook Info » où je stocker des informations sur un utilisateur qui, comme été glanées à partir accéder à cet utilisateur dans le graphe Facebook?

De cette façon, je peux normaliser le tableau des utilisateurs avec les informations de base que chaque utilisateur possède ou non via Facebook (nom, email, mot de passe) et compléter ces données avec les données de son profil Facebook s'il devient disponible?

Y a-t-il une meilleure façon de procéder? Existe-t-il un bon guide ou tutoriel pour concevoir ce type de modèle de base de données (pensez à Quora)? Je peux gérer un tutoriel PHP aussi btw!

Désolé pour la question ouverte.

Répondre

6

Vous pouvez envisager d'utiliser Signet ou OmniAuth pour votre client OAuth si vous essayez de faire Twitter et Facebook. Je suis partial envers Signet, depuis que je l'ai écrit, mais OmniAuth pourrait être le meilleur choix pour l'instant car cela fait un peu plus longtemps, selon ce que vous essayez de faire.

En ce qui concerne la modélisation de données, vous avez la bonne idée. Vous avez probablement besoin de le rendre un peu plus générique. Au lieu de simplement access_key, vous avez probablement besoin de access_token et potentiellement d'un refresh_token pour OAuth 2. Pendant ce temps, OAuth 1 utilise une paire clé/clé secrète. Alors peut-être quelque chose comme ça (en omettant les clés primaires et étrangères):

auth_scheme | access_token | refresh_token | key | secret | username | password 
------------------------------------------------------------------------------- 
oauth_1  |    |    | 123 | 456 |   | 
oauth_2  | 123   |    |  |  |   | 
oauth_2  | 123   | abcd   |  |  |   | 
xauth  |    |    |  |  | abcd  | 12345 
clientlogin |    |    |  |  | abcd  | 12345 
+0

Heureux de voir que j'étais sur la bonne voie au moins! Quoi qu'il en soit, j'ai regardé les sites Signet et OmniAuth GitHub et j'ai trouvé quelques RailsCasts sur le sujet. J'ai décidé de revenir au début et d'implémenter Devise pour le contrôle de l'utilisateur, puis de superposer OmniAuth. J'ai choisi OmniAuth sur Signet à ce stade, principalement parce qu'il semble qu'il fournit des documents plus complets (je suis un noob!) Et j'adore le fait que RailsCasts l'intègre. Vraiment apprécier la divulgation complète et merci pour votre message. –

Questions connexes