登録に必要な招待コードをメールで送信する Yesod 認証プラグインを作成しました。プラグインに含めたいものの 1 つは、招待状を作成するためのフォームを含むウィジェットです。フォームは認証プラグイン内のルートに投稿します。私が問題を抱えているのは、適切な URL の作成を可能にし、マスター サイトのハンドラー内でも使用できるウィジェットのタイプ シグネチャを見つけることです。
必要なものだけを削除すると、ウィジェットは次のようになります。
invitationWidget :: GWidget Auth m ()
invitationWidget = do
tm <- lift getRouteToMaster
[whamlet|<form action=@{tm inviteR}>|]
inviteR :: AuthRoute
inviteR = PluginR "invite" ["invite"]
問題は、ウィジェットのサブサイトを指定すると、Auth
それをタイプのハンドラーに直接埋め込むことができないことですGHandler master master a
(正確なエラーは ですCouldn't match type `App' with `Yesod.Auth.Auth'
)。ただし、サブサイトが指定されていない場合、たとえばinvitationWidget :: GWidget s m ()
、 にアクセスする方法がわかりませんinviteR
(そのエラーは ですCould not deduce (MonadLift (GHandler Auth m) (GWidget s m))
)。