Bugfix - Correct duplicate nesting of 'Content' to be returned to template

In scenarios where:

- No member is logged in
- An 'AutoLoginHash' is provided via the 't' (token) query param
- The token isn't valid (determined by Member::validateAutoLoginToken())

The message which is intended to be returned to the end-user via $Content
in the template, is mistakenly double nested in ['Content' => ['Content' => 'Message']]
this leads to "The method forTemplate() doesn't exist on ArrayData" errors.

See - https://github.com/silverstripe/silverstripe-framework/issues/7866
This commit is contained in:
Joe Harvey 2018-03-07 12:59:17 +00:00
parent f4caa5101f
commit bf2cee3989

View File

@ -112,21 +112,19 @@ class ChangePasswordHandler extends RequestHandler
} }
// Show a friendly message saying the login token has expired // Show a friendly message saying the login token has expired
if ($token !== null && $member && !$member->validateAutoLoginToken($token)) { if ($token !== null && $member && !$member->validateAutoLoginToken($token)) {
$message = [ $message = DBField::create_field(
'Content' => DBField::create_field( 'HTMLFragment',
'HTMLFragment', _t(
_t( 'SilverStripe\\Security\\Security.NOTERESETLINKINVALID',
'SilverStripe\\Security\\Security.NOTERESETLINKINVALID', '<p>The password reset link is invalid or expired.</p>'
'<p>The password reset link is invalid or expired.</p>' . '<p>You can request a new one <a href="{link1}">here</a> or change your password after'
. '<p>You can request a new one <a href="{link1}">here</a> or change your password after' . ' you <a href="{link2}">logged in</a>.</p>',
. ' you <a href="{link2}">logged in</a>.</p>', [
[ 'link1' => $this->link('lostpassword'),
'link1' => $this->link('lostpassword'), 'link2' => $this->link('login')
'link2' => $this->link('login') ]
]
)
) )
]; );
return [ return [
'Content' => $message, 'Content' => $message,