如何在Yesod中为HashDB实现loginHandler?

时间:2014-05-26 18:03:59

标签: authentication haskell yesod

我使用Yesod.Auth.HashDB在Yesod中实现基于用户名/密码的身份验证,并且我想在登录页面上应用一些样式。我想我可以使用YesodAuth typeclassloginHandler函数执行此操作,但我不确定如何实现它。

2 个答案:

答案 0 :(得分:2)

我在发布问题之前想出了如何处理这个问题:

loginHandler = do
    lift $ defaultLayout $(widgetFile "auth")

其中auth是由模板中至少包含auth.hamlet文件组成的小部件。

答案 1 :(得分:1)

从yesod-auth-hashdb 1.3.2开始,您现在也可以使用authHashDBWithForm。我无法弄清楚如何使用POST来处理loginHandler和自定义小部件文件(在任何地方都没有示例)。然后我按照authHashDBWithForm的例子进行操作,效果非常好。

来自docs

  

==自定义登录表单

     

可以提供自定义HTML表单,而不是使用内置HTML表单   使用'authHashDBWithForm'而不是'authHashDB'。

     

自定义表单需要作为返回Widget的函数给出,因为   它必须构建提供的“动作”URL,并且必须提供两个文本   称为“用户名”和“密码”的字段。例如,以下内容   修改上面给出的大纲代码将取代默认值   具有非常小的形式,没有标签和简单的布局。

instance YesodAuth App where
   ....
   authPlugins _ = [ authHashDBWithForm myform (Just . UniqueUser), .... ]

myform :: Route App -> Widget
myform action = $(whamletFile "templates/loginform.hamlet")
  

其中templates / loginform.hamlet包含

<form method="post" action="@{action}">
    <input name="username">
    <input type="password" name="password">
    <input type="submit" value="Login">