Yesod.Auth.Email — установка общедоступного идентификатора пользователя

Я изучал Yesod, используя его для восстановления своего веб-сайта. Я начал с использования кода, сгенерированного yesod init. Этот код использует структуру аутентификации, поставляемую с Yesod, включая Yesod.Auth.Email, которая позволяет вам создать учетную запись, указав адрес электронной почты.

Проблема с кодом по умолчанию заключается в следующем: он устанавливает идентификатор пользователя на его адрес электронной почты. Если идентификатор будет использоваться публично на веб-сайте (например, для идентификации комментаторов на странице / в блоге), вам нужно что-то, что пользователь не будет возражать против отображения для их идентификации.

В идеале я хочу, чтобы веб-сайт запрашивал (уникальный) общедоступный идентификатор либо в тот момент, когда они отправляют свой адрес электронной почты, либо когда они нажимают на ссылку для проверки учетной записи и ввода своего пароля. Проблема в том, что это может потребовать внесения изменений в модули Yesod, поскольку там определены формы регистра/пароля.

Я могу легко внести изменения. Но я действительно не хочу продолжать разветвлять модули Yesod, чтобы заставить их делать то, что я хочу. Есть ли другой способ сделать это, используя существующие модули yesod-auth? Вполне возможно, что это можно сделать с помощью фреймворка, как он есть, но если это так, то небольшой пример будет оценен.


person chrisdb    schedule 09.08.2011    source источник


Ответы (1)


Я не уверен, какой код вы используете для отображения личности пользователя на веб-сайте, но вы можете очень легко добавить столбец в таблицу пользователей:

User
  ...
  publicIdentifier Text Update

а в вашей деревушке просто интерполируйте переменную:

#{userPublicIdentifier user}
person mxc    schedule 10.08.2011
comment
Я мог бы это сделать, но проблема в том, что пользователь предоставляет этот publicIdentifier. Формы для регистрации нового пользователя определены в Yesod.Auth.Email, но я хочу попросить уникальный публичный уникальный, когда пользователь регистрируется. Поэтому кажется, что мне нужно разветвить Yesod.Auth.Email, чтобы делать то, что я хочу. - person chrisdb; 10.08.2011
comment
Я все еще рекомендую подход Макса. Посмотрите, что мы сделали для Haskellers: сначала вы входите в систему, а затем добавляете дополнительные элементы профиля. Имейте в виду, что аутентификация Yesod должна хорошо сочетаться со сторонней аутентификацией, где это единственный возможный подход. - person Michael Snoyman; 10.08.2011