Yesod.Authが以前のように行われた理由について質問があります。私はカスタム登録フォームを作成しようとしていました-つまり、電子メール以外のより多くのフィールド-そしてこれが私が途中で見つけた問題です:
そして、それは私に疑問を抱かせました:なぜ私たちは単にカスタムの集落ファイルを提供してそれで終わらせることができないのですか?これらの関数のカスタムバージョンを作成する必要があるのはなぜですか?
これらの関数、特にregisterHelperが、Yesod.Auth.Emailの表示メンバーとして作成されなかったのはなぜですか?
Yesod.PasswordStoreが公開されなかったのはなぜですか?
うさぎの穴に深く入り込んでPasswordStoreのフォークを書き直したくないので、Yesod.Auth.Emailを使用してカスタム登録フォームを作成することはできないことに気づきました。
私はここで何かが足りないのですか、それとも私はこれを正しく理解しましたか?Yesod.Auth.Emailがそのように構築されたのはなぜですか?
これに関してMichaelSnoymanが行った設計上の決定については正確にはわかりませんが、私の理由は、「電子メール」はアカウントの登録に必要な最小限の情報であるということでした。メールを登録すると、登録リンクのメールがアカウントに送信され、アカウントを確認できます。このパスワードリセットページにあり、新しいパスワードを設定するとともに、すべてのカスタムフィールドを定義します。新しいパスワードを設定するための独自のハンドラーを定義します。通常、コードは次のようになります。
if (jpNewPassword profile == jpConfirmPassword profile)
then do
newPass <- liftIO $ saltPass (jpNewPassword profile)
lift $
runDB $
do user <- getUser maid
update maid [UserPassword =. (Just newPass)]
上記は私の個人的なプロジェクトの1つからのコードです。
なぜカスタムハムレットファイルを提供してそれで済ませることができないのですか?
それでも、カスタムの集落ファイルを提供できます。これはsetPasswordHandler
、次のインスタンスでmyがどのように定義されるかですYesodAuthEmail
。
setPasswordHandler _ =
selectRep $
do provideRep $ return $(shamletFile "./templates/password.shamlet")
Yesod.PasswordStoreが公開されなかったのはなぜですか?
上で説明したように、Yesod.PasswordStore
公開されることなくパスワードを更新できます。関連する機能はしているYesod.Auth.Email
モジュール。
そうは言っても、私はあなたの懸念を理解することができます。これが、Yesod.Auth.Email
モジュール内のすべてのエンドポイントにJSONエンドポイントを実装した理由です。これにより、検証やその他の作業をクライアント側で簡単に実行できます。これらのエンドポイントは、上記のリンクされたHaddockページに記載されています。ただし、登録ページにカスタムフィールドが必要な場合は、Yesod.Auth.Email
モジュールのコード変更が必要になる可能性があります。githubで問題を開いて(PRを送信できる場合はブラウンポイント!)、そこでフィードバックを提供することをお勧めします。私たちは変化に対して非常にオープンです!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加