2010-12-12 71 views
1

J'ai un formulaire d'inscription dont la plupart des champs sont pré-remplis en utilisant le compte Facebook de l'utilisateur. Je voudrais rendre certains champs, comme - email, impossible à l'utilisateur d'écraser. Des idées pour résoudre ceci?Protection des champs de formulaire pré-remplis contre l'écrasement par l'utilisateur (Rails)

Mise à jour: Peut-être cela plus logique ... Ce que j'est un formulaire d'inscription, qui est:

  1. premier étant pré-rempli d'informations sur le compte Facebook de l'utilisateur,
  2. puis l'utilisateur doit remplir des champs supplémentaires, comme le mot de passe.
  3. Lorsque le formulaire est soumis, un nouvel utilisateur est créé à l'aide de ces données de formulaire.

Ce que je veux est de faire en sorte que le email que je suis arrivé de Facebook et utilisé pour préremplir formulaire d'inscription est le même au moment où je crée un nouveau record utilisateur.

J'ai besoin d'un moyen de comparer les courriels que j'ai reçus de Facebook et de mes courriels lorsque j'ai reçu un formulaire, ou d'interdire à l'utilisateur de modifier ce champ.

Je pensais à stocker peut-être email en session d'utilisateurs ... mais cela ne semble pas juste ...

Merci!

+0

saisissez-vous l'info facebook, et la stockez-vous dans le modèle? Ou est-ce que vous le montrez simplement sur la page Web, puis vous le stockez une fois qu'il a envoyé le formulaire? – Doon

+0

Je le montre sur la page d'inscription, puis l'utilisateur doit remplir des champs supplémentaires, puis soumettre le formulaire. En utilisant les données collectées, l'enregistrement de l'utilisateur est créé – spacemonkey

Répondre

0

Je voudrais stocker tout ce que vous voulez retenir de facebook dans la session, comme vous le suggérez. Bien sûr, vous ne pouvez pas faire confiance à tout ce que l'utilisateur soumet pour que tout ce que vous avez reçu du côté du serveur soit important.

Il n'y a aucune raison de fournir un champ de saisie pour le courrier électronique si vous ne voulez pas qu'il puisse le changer. Je voudrais juste l'afficher.

Vous voudrez peut-être envisager d'utiliser attr_protected :email (ou mieux d'utiliser attr_accessible) sur le courrier électronique afin de vous assurer qu'il n'y a pas de mises à jour involontaires sur le terrain.

2

Vous pouvez désactiver les champs de saisie dans le code HTML. Cela empêche les utilisateurs de modifier les valeurs. Cependant, des outils comme firebug rendent trivial de le "pirater". La plupart des gens ne le feront pas et habituellement cela suffit.

Si vous voulez vraiment l'appliquer, vous devez supprimer les paramètres du côté serveur, juste avant de les envoyer à la base de données. Une façon consiste à implémenter votre propre dynamic attr_accessible. L'autre façon est de les enlever du hash params.

+0

J'ai mis à jour ma question, peut-être qu'il sera plus clair maintenant ce que je veux atteindre – spacemonkey