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
## 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)

View File

@ -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

View File

@ -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