diff --git a/yesod-auth/ChangeLog.md b/yesod-auth/ChangeLog.md index d656e10c..2f4c93b7 100644 --- a/yesod-auth/ChangeLog.md +++ b/yesod-auth/ChangeLog.md @@ -1,5 +1,10 @@ # ChangeLog for yesod-auth +## 1.6.9 + +* Added `registerHelper` and `passwordResetHelper` methods to the `YesodAuthEmail` class, allowing for customizing behavior for user registration and forgot password requests [#1660](https://github.com/yesodweb/yesod/pull/1660) +* Exposed `defaultRegisterHelper` as default implementation for the above methods + ## 1.6.8.1 * Email: Fix typo in `defaultEmailLoginHandler` template [#1605](https://github.com/yesodweb/yesod/pull/1605) diff --git a/yesod-auth/Yesod/Auth/Email.hs b/yesod-auth/Yesod/Auth/Email.hs index bfff182c..2a678a6a 100644 --- a/yesod-auth/Yesod/Auth/Email.hs +++ b/yesod-auth/Yesod/Auth/Email.hs @@ -113,6 +113,8 @@ module Yesod.Auth.Email , defaultRegisterHandler , defaultForgotPasswordHandler , defaultSetPasswordHandler + -- * Default helpers + , defaultRegisterHelper ) where import Yesod.Auth @@ -385,6 +387,35 @@ class ( YesodAuth site -> AuthHandler site TypedContent setPasswordHandler = defaultSetPasswordHandler + + -- | Helper that controls what happens after a user registration + -- request is submitted. This method can be overridden to completely + -- customize what happens during the user registration process, + -- such as for handling additional fields in the registration form. + -- + -- The default implementation is in terms of 'defaultRegisterHelper'. + -- + -- @since: 1.6.9 + registerHelper :: Route Auth + -- ^ Where to sent the user in the event + -- that registration fails + -> AuthHandler site TypedContent + registerHelper = defaultRegisterHelper False False + + -- | Helper that controls what happens after a forgot password + -- request is submitted. As with `registerHelper`, this method can + -- be overridden to customize the behavior when a user attempts + -- to recover their password. + -- + -- The default implementation is in terms of 'defaultRegisterHelper'. + -- + -- @since: 1.6.9 + passwordResetHelper :: Route Auth + -- ^ Where to sent the user in the event + -- that the password reset fails + -> AuthHandler site TypedContent + passwordResetHelper = defaultRegisterHelper True True + authEmail :: (YesodAuthEmail m) => AuthPlugin m authEmail = AuthPlugin "email" dispatch emailLoginHandler @@ -516,12 +547,12 @@ parseRegister = withObject "email" (\obj -> do pass <- obj .:? "password" return (email, pass)) -registerHelper :: YesodAuthEmail master - => Bool -- ^ allow usernames? - -> Bool -- ^ forgot password? - -> Route Auth - -> AuthHandler master TypedContent -registerHelper allowUsername forgotPassword dest = do +defaultRegisterHelper :: YesodAuthEmail master + => Bool -- ^ Allow lookup via username in addition to email + -> Bool -- ^ Set to `True` for forgot password flow, `False` for new account registration + -> Route Auth + -> AuthHandler master TypedContent +defaultRegisterHelper allowUsername forgotPassword dest = do y <- getYesod checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName result <- runInputPostResult $ (,) @@ -549,7 +580,7 @@ registerHelper allowUsername forgotPassword dest = do _ -> Nothing case eidentifier of - Left route -> loginErrorMessageI dest route + Left failMsg -> loginErrorMessageI dest failMsg Right identifier -> do mecreds <- getEmailCreds identifier registerCreds <- @@ -586,7 +617,7 @@ registerHelper allowUsername forgotPassword dest = do postRegisterR :: YesodAuthEmail master => AuthHandler master TypedContent -postRegisterR = registerHelper False False registerR +postRegisterR = registerHelper registerR getForgotPasswordR :: YesodAuthEmail master => AuthHandler master Html getForgotPasswordR = forgotPasswordHandler @@ -630,7 +661,7 @@ defaultForgotPasswordHandler = do } postForgotPasswordR :: YesodAuthEmail master => AuthHandler master TypedContent -postForgotPasswordR = registerHelper True True forgotPasswordR +postForgotPasswordR = passwordResetHelper forgotPasswordR getVerifyR :: YesodAuthEmail site => AuthEmailId site diff --git a/yesod-auth/yesod-auth.cabal b/yesod-auth/yesod-auth.cabal index 83ecf1e2..0f39f49b 100644 --- a/yesod-auth/yesod-auth.cabal +++ b/yesod-auth/yesod-auth.cabal @@ -1,5 +1,5 @@ name: yesod-auth -version: 1.6.8.1 +version: 1.6.9 license: MIT license-file: LICENSE author: Michael Snoyman, Patrick Brisbin