Yesod Authのカスタムログインフォーム
やっぱり次の要望としてログインフォームをイジりたくなってしまいます、英語で「Login」とか書かれても純粋日本男児としては体が受け付けません。
どうやったらカスタマイズ出きるかと調べたのでメモ。
Foundation.hsのYesodAuthインスタンスをイジる
authHashDBWithForm関数の宣言
import Yesod.Auth.HashDB (authHashDBWithForm, getAuthIdHashDB, HashDBUser(..))
authPluginsをauthHashDBからauthHashDBWithFormへ修正する
instance YesodAuth App where
type AuthId App = UserId
-- Where to send a user after successful login
loginDest _ = HomeR
-- Where to send a user after logout
logoutDest _ = HomeR
-- Override the above two destinations when a Referer: header is present
redirectToReferer _ = True
getAuthId creds = getAuthIdHashDB AuthR (Just . UniqueUser) creds
authPlugins _ = [authHashDBWithForm loginForm (Just . UniqueUser)]
...
...
カスタムテンプレートを出力する関数を用意する
loginForm :: Route App -> Widget loginForm action = $(whamletFile "templates/loginform.hamlet")
そして最後にhamletテンプレートファイルを作成
<div style="text-align:center">
<h2>日本語でログインフォーム
<form method="post" action="@{action}">
<table border="0" cellpadding="0" cellspacing="0" style="margin-left: auto; margin-right: auto">
<tbody>
<tr>
<td valign="top">ログインID:
<td valign="top">
<input name="username" style="width:250px">
<tr>
<td valign="top">パスワード:
<td valign="top">
<input type="password" name="password" style="width:250px">
<tr>
<td colspan="2" valign="top">
<input type="submit" value="乱入じゃなくてログインする">
これで起動すると
となりした、オリジナルのログインフォームはjavascriptが動いていましたがこのフォームは動きません。authHashDB関数辺りを調べれば分かるような気がします。
参考にしたサイト
Authentication plugin for Yesod.
って書いてあるじゃないか、ちゃんとドキュメントを最初にしっかり読みましょう

0 件のコメント:
コメントを投稿