Merge pull request #1660 from charukiewicz/register-helper

Add methods to YesodAuthEmail that allow custom flow after registration/password reset
This commit is contained in:
Michael Snoyman 2020-02-11 08:44:30 +02:00 committed by GitHub
commit b4c613f766
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 10 deletions

View File

@ -1,5 +1,10 @@
# ChangeLog for yesod-auth # 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 ## 1.6.8.1
* Email: Fix typo in `defaultEmailLoginHandler` template [#1605](https://github.com/yesodweb/yesod/pull/1605) * Email: Fix typo in `defaultEmailLoginHandler` template [#1605](https://github.com/yesodweb/yesod/pull/1605)

View File

@ -113,6 +113,8 @@ module Yesod.Auth.Email
, defaultRegisterHandler , defaultRegisterHandler
, defaultForgotPasswordHandler , defaultForgotPasswordHandler
, defaultSetPasswordHandler , defaultSetPasswordHandler
-- * Default helpers
, defaultRegisterHelper
) where ) where
import Yesod.Auth import Yesod.Auth
@ -385,6 +387,35 @@ class ( YesodAuth site
-> AuthHandler site TypedContent -> AuthHandler site TypedContent
setPasswordHandler = defaultSetPasswordHandler 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 :: (YesodAuthEmail m) => AuthPlugin m
authEmail = authEmail =
AuthPlugin "email" dispatch emailLoginHandler AuthPlugin "email" dispatch emailLoginHandler
@ -516,12 +547,12 @@ parseRegister = withObject "email" (\obj -> do
pass <- obj .:? "password" pass <- obj .:? "password"
return (email, pass)) return (email, pass))
registerHelper :: YesodAuthEmail master defaultRegisterHelper :: YesodAuthEmail master
=> Bool -- ^ allow usernames? => Bool -- ^ Allow lookup via username in addition to email
-> Bool -- ^ forgot password? -> Bool -- ^ Set to `True` for forgot password flow, `False` for new account registration
-> Route Auth -> Route Auth
-> AuthHandler master TypedContent -> AuthHandler master TypedContent
registerHelper allowUsername forgotPassword dest = do defaultRegisterHelper allowUsername forgotPassword dest = do
y <- getYesod y <- getYesod
checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName
result <- runInputPostResult $ (,) result <- runInputPostResult $ (,)
@ -549,7 +580,7 @@ registerHelper allowUsername forgotPassword dest = do
_ -> Nothing _ -> Nothing
case eidentifier of case eidentifier of
Left route -> loginErrorMessageI dest route Left failMsg -> loginErrorMessageI dest failMsg
Right identifier -> do Right identifier -> do
mecreds <- getEmailCreds identifier mecreds <- getEmailCreds identifier
registerCreds <- registerCreds <-
@ -586,7 +617,7 @@ registerHelper allowUsername forgotPassword dest = do
postRegisterR :: YesodAuthEmail master => AuthHandler master TypedContent postRegisterR :: YesodAuthEmail master => AuthHandler master TypedContent
postRegisterR = registerHelper False False registerR postRegisterR = registerHelper registerR
getForgotPasswordR :: YesodAuthEmail master => AuthHandler master Html getForgotPasswordR :: YesodAuthEmail master => AuthHandler master Html
getForgotPasswordR = forgotPasswordHandler getForgotPasswordR = forgotPasswordHandler
@ -630,7 +661,7 @@ defaultForgotPasswordHandler = do
} }
postForgotPasswordR :: YesodAuthEmail master => AuthHandler master TypedContent postForgotPasswordR :: YesodAuthEmail master => AuthHandler master TypedContent
postForgotPasswordR = registerHelper True True forgotPasswordR postForgotPasswordR = passwordResetHelper forgotPasswordR
getVerifyR :: YesodAuthEmail site getVerifyR :: YesodAuthEmail site
=> AuthEmailId site => AuthEmailId site

View File

@ -1,5 +1,5 @@
name: yesod-auth name: yesod-auth
version: 1.6.8.1 version: 1.6.9
license: MIT license: MIT
license-file: LICENSE license-file: LICENSE
author: Michael Snoyman, Patrick Brisbin author: Michael Snoyman, Patrick Brisbin