Защита предварительно заполненных полей формы от перезаписи пользователем (Rails)

У меня есть форма регистрации, большинство полей которой предварительно заполнены с использованием учетной записи Facebook пользователя. Я хотел бы сделать так, чтобы некоторые поля, например электронная почта, не могли быть перезаписаны пользователем. Есть идеи, как это решить?

Обновлено: Может быть, это будет иметь больше смысла... У меня есть регистрационная форма, а именно:

  1. сначала предварительно заполняется информацией из учетной записи пользователя Facebook,
  2. затем пользователь должен заполнить некоторые дополнительные поля, например пароль.
  3. при отправке формы новый пользователь создается с использованием данных этой формы.

Я хочу убедиться, что электронное письмо, которое я получил от Facebook и использовал для предварительного заполнения формы регистрации, было таким же, когда я создавал новую запись пользователя.

Мне нужен способ сравнить электронную почту, которую я получил от Facebook, и электронную почту, которую я получил, когда форма была отправлена, или как-то запретить пользователю редактировать это поле.

Я думал о том, чтобы, возможно, хранить электронную почту в сеансе пользователей... но это звучит неправильно...

Спасибо!


person spacemonkey    schedule 12.12.2010    source источник
comment
вы берете информацию из facebook и сохраняете ее в модели? Или вы просто показываете его на веб-странице, а затем сохраняете после отправки формы?   -  person Doon    schedule 12.12.2010
comment
Я показываю это на странице регистрации, затем пользователь должен заполнить некоторые дополнительные поля, а затем отправить форму. На основе собранных данных создается запись пользователя   -  person spacemonkey    schedule 12.12.2010


Ответы (2)


Я бы сохранил все, что вы хотите сохранить из facebook в сеансе, как вы предлагаете. Конечно, вы не можете доверять ничему, что отправляет пользователь, поэтому все, что вы получили на стороне сервера, должно быть сохранено.

Нет причин предоставлять поле ввода для электронной почты, если вы не хотите, чтобы они могли его изменить. Я бы просто показал это.

Возможно, вы захотите рассмотреть возможность использования attr_protected :email (или еще лучше использовать attr_accessible) в электронной почте, чтобы быть уверенным в отсутствии непреднамеренных обновлений поля.

person aceofspades    schedule 12.12.2010

Вы можете отключить поля ввода в HTML. Это не позволяет пользователям редактировать значения. Однако такие инструменты, как firebug, упрощают его «взлом». Большинство людей не будут, и обычно этого достаточно.

Если вы действительно хотите применить его, вам придется удалить параметры на стороне сервера непосредственно перед отправкой их в базу данных. Один из способов — реализовать собственный динамический атрибут attr_accessible. Другой способ — удалить их из хэша params.

person iain    schedule 12.12.2010
comment
Я обновил свой вопрос, может быть, теперь будет более понятно, чего я хочу достичь - person spacemonkey; 12.12.2010