我有一个问题,为什么Yesod.Auth按原样完成。我试图创建一个自定义注册表单 - 即:除了电子邮件之外的更多字段 - 以下是我在此过程中遇到的问题:
它让我想知道:为什么我们不能简单地提供一个自定义的小村庄文件并完成它?为什么我必须创建这些功能的自定义版本?
为什么这些功能,特别是 registerHelper ,并未创建为Yesod.Auth.Email的可见成员?
为什么 Yesod.PasswordStore 未公开?
鉴于我不想深入挖掘兔子洞并重写密码存储,我才意识到使用Yesod.Auth.Email不可能有自定义注册表单。
我在这里错过了什么,或者我说得对吗?为什么Yesod.Auth.Email是以这种方式构建的?
答案 0 :(得分:1)
我并不完全了解Michael Snoyman就此做出的设计决定,但我的理由是“电子邮件”是注册帐户所需的最少信息。注册电子邮件后,会向您的帐户发送注册链接电子邮件,通过该电子邮件可以验证您的帐户。它位于此密码重置页面上,我在其中定义了所有自定义字段以及设置新密码。我定义了自己的设置新密码的处理程序。代码通常是这样的:
if (jpNewPassword profile == jpConfirmPassword profile)
then do
newPass <- liftIO $ saltPass (jpNewPassword profile)
lift $
runDB $
do user <- getUser maid
update maid [UserPassword =. (Just newPass)]
以上是我个人项目中的代码。
为什么我们不能简单地提供自定义的hamlet文件并完成它?
那么你仍然可以提供自定义的hamlet文件。这就是我在setPasswordHandler
:
YesodAuthEmail
的方式
setPasswordHandler _ =
selectRep $
do provideRep $ return $(shamletFile "./templates/password.shamlet")
为什么Yesod.PasswordStore没有曝光?
如上所述,您仍然可以在不显示Yesod.PasswordStore
的情况下更新密码。 relevant functions位于Yesod.Auth.Email
模块中。
话虽这么说,我能理解你的担忧。这就是我为Yesod.Auth.Email
模块中的所有端点实现JSON端点的原因,以便可以在客户端本身轻松完成验证和其他内容。这些端点已记录在上面链接的Haddock页面中。但是如果你想在注册页面中有自定义字段,我认为它可能涉及Yesod.Auth.Email
模块中的一些代码更改。我建议你在github中打开一个问题(如果你也可以发送公关,那就是布朗尼点!)并在那里给我们反馈。我们非常愿意改变!