#99: Email address can now be changed and confirmed with registration
This commit is contained in:
parent
5a04247621
commit
2e0e98810a
@ -18,31 +18,78 @@ use Symfony\Component\HttpFoundation\Request;
|
|||||||
|
|
||||||
class UserController extends Controller
|
class UserController extends Controller
|
||||||
{
|
{
|
||||||
|
public function confirmEmailChangeState(Request $request)
|
||||||
|
{
|
||||||
|
$user = $this->getUser();
|
||||||
|
if (!$user->is_email_change_in_progress)
|
||||||
|
{
|
||||||
|
return redirect(route('userSettings'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the e-mail address
|
||||||
|
$user->email = $user->new_email_address;
|
||||||
|
|
||||||
|
// Reset the e-mail change state
|
||||||
|
$user->is_email_change_in_progress = false;
|
||||||
|
$user->new_email_address = null;
|
||||||
|
$user->save();
|
||||||
|
|
||||||
|
$request->session()->flash('success', trans('auth.change_email_success_message'));
|
||||||
|
return redirect(route('userSettings'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resetEmailChangeState(Request $request)
|
||||||
|
{
|
||||||
|
$user = $this->getUser();
|
||||||
|
if (!$user->is_email_change_in_progress)
|
||||||
|
{
|
||||||
|
return redirect(route('userSettings'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $request->all();
|
||||||
|
|
||||||
|
if (isset($data['resend_email']))
|
||||||
|
{
|
||||||
|
$this->sendEmailChangeConfirmationEmail($user, $user->new_email_address);
|
||||||
|
$request->session()->flash('info', trans('auth.change_email_required_message'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($data['cancel_change']))
|
||||||
|
{
|
||||||
|
$user->is_email_change_in_progress = false;
|
||||||
|
$user->new_email_address = null;
|
||||||
|
$user->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect(route('userSettings'));
|
||||||
|
}
|
||||||
|
|
||||||
public function saveSettings(SaveUserSettingsRequest $request)
|
public function saveSettings(SaveUserSettingsRequest $request)
|
||||||
{
|
{
|
||||||
$data = $request->only(['name', 'email', 'profile_alias', 'enable_profile_page']);
|
$data = $request->only(['name', 'email', 'profile_alias', 'enable_profile_page']);
|
||||||
$user = $this->getUser();
|
$user = $this->getUser();
|
||||||
|
|
||||||
if (UserConfig::get('require_email_verification'))
|
if (
|
||||||
|
UserConfig::get('require_email_verification') &&
|
||||||
|
isset($data['email']) &&
|
||||||
|
$data['email'] != $user->email &&
|
||||||
|
!$user->is_email_change_in_progress
|
||||||
|
)
|
||||||
{
|
{
|
||||||
// Can't update the e-mail directly until the new e-mail address has been verified.
|
// Can't update the e-mail directly until the new e-mail address has been verified.
|
||||||
// TODO - send e-mail and handle response, flag e-mail as being "change in-progress"
|
// TODO - send e-mail and handle response, flag e-mail as being "change in-progress"
|
||||||
// Send activation e-mail
|
// Send activation e-mail
|
||||||
|
|
||||||
// Temporarily change the e-mail address so we can send the activation message
|
$this->sendEmailChangeConfirmationEmail($user, $data['email']);
|
||||||
$oldEmailAddress = $user->getEmailForPasswordReset();
|
|
||||||
$user->email = $data['email'];
|
|
||||||
|
|
||||||
Mail::to($this->getUser())->send(new UserChangeEmailRequired($this->getUser()));
|
|
||||||
$request->session()->flash('info', trans('auth.change_email_required_message'));
|
$request->session()->flash('info', trans('auth.change_email_required_message'));
|
||||||
|
|
||||||
// Flag the user as a change e-mail in progress
|
// Flag the user as a change e-mail in progress
|
||||||
$user->new_email_address = $user->email;
|
$user->new_email_address = $data['email'];
|
||||||
$user->is_email_change_in_progress = true;
|
$user->is_email_change_in_progress = true;
|
||||||
$user->email = $oldEmailAddress;
|
|
||||||
$user->save();
|
$user->save();
|
||||||
|
|
||||||
unset($data['email']);
|
unset($data['email']);
|
||||||
|
$request->session()->flash('info', trans('auth.change_email_required_message'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow e-mail address to be changed if a change is in progress
|
// Don't allow e-mail address to be changed if a change is in progress
|
||||||
@ -252,4 +299,13 @@ class UserController extends Controller
|
|||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function sendEmailChangeConfirmationEmail(User $user, $newEmailAddress)
|
||||||
|
{
|
||||||
|
$oldEmailAddress = $user->email;
|
||||||
|
$user->email = $newEmailAddress;
|
||||||
|
|
||||||
|
Mail::to($user)->send(new UserChangeEmailRequired($user));
|
||||||
|
$user->email = $oldEmailAddress;
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,6 +22,7 @@ return [
|
|||||||
'Please click the link in this e-mail to activate your account.',
|
'Please click the link in this e-mail to activate your account.',
|
||||||
'change_email_required_message' => 'An e-mail containing an activation link has been sent to the e-mail address you provided. ' .
|
'change_email_required_message' => 'An e-mail containing an activation link has been sent to the e-mail address you provided. ' .
|
||||||
'Please click the link in this e-mail to confirm your new e-mail address.',
|
'Please click the link in this e-mail to confirm your new e-mail address.',
|
||||||
|
'change_email_success_message' => 'Your e-mail address change has been confirmed. You will now need to login with your new e-mail address.',
|
||||||
'change_password_action' => 'Change password',
|
'change_password_action' => 'Change password',
|
||||||
'change_password_title' => 'Change your password',
|
'change_password_title' => 'Change your password',
|
||||||
'email_password_login' => 'Alternatively, login with your e-mail address and password:',
|
'email_password_login' => 'Alternatively, login with your e-mail address and password:',
|
||||||
|
@ -79,6 +79,9 @@ return [
|
|||||||
'no_albums_p2' => ':user_name has not created any albums yet.'
|
'no_albums_p2' => ':user_name has not created any albums yet.'
|
||||||
],
|
],
|
||||||
'user_settings' => [
|
'user_settings' => [
|
||||||
|
'cancel_email_change' => 'Don\'t change e-mail address',
|
||||||
|
'change_email_in_progress' => 'To confirm your new e-mail address, please click on the "confirm" link in the e-mail that was sent to: <b>:new_email_address</b>.',
|
||||||
|
'change_email_resend' => 'Re-send confirmation e-mail.',
|
||||||
'change_password' => 'Change password',
|
'change_password' => 'Change password',
|
||||||
'settings_saved' => 'Your settings were updated successfully.',
|
'settings_saved' => 'Your settings were updated successfully.',
|
||||||
'title' => 'Change my settings'
|
'title' => 'Change my settings'
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
@lang('email.change_email_required_p2')
|
@lang('email.change_email_required_p2')
|
||||||
|
|
||||||
@component('mail::button', ['url' => route('auth.activate', ['token' => $user->activation_token]), 'color' => 'blue'])
|
@component('mail::button', ['url' => route('userSettings.confirmEmailChangeState'), 'color' => 'blue'])
|
||||||
@lang('forms.confirm_email_action')
|
@lang('forms.confirm_email_action')
|
||||||
@endcomponent
|
@endcomponent
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8 mr-md-auto ml-md-auto">
|
<div class="col-lg-8 mr-lg-auto ml-lg-auto">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<ul class="nav nav-tabs card-header-tabs">
|
<ul class="nav nav-tabs card-header-tabs">
|
||||||
@ -14,6 +14,17 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@if ($user->is_email_change_in_progress)
|
||||||
|
<div class="alert alert-warning mb-4" role="alert">
|
||||||
|
<p>@lang('gallery.user_settings.change_email_in_progress', ['new_email_address' => $user->new_email_address])</p>
|
||||||
|
<form action="{{ route('userSettings.resetEmailChangeState') }}" method="post">
|
||||||
|
{{ csrf_field() }}
|
||||||
|
<button type="submit" class="btn btn-outline-info" name="resend_email">@lang('gallery.user_settings.change_email_resend')</button>
|
||||||
|
<button type="submit" class="btn btn-outline-info" name="cancel_change">@lang('gallery.user_settings.cancel_email_change')</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
<form action="{{ route('saveUserSettings') }}" method="post">
|
<form action="{{ route('saveUserSettings') }}" method="post">
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
|
|
||||||
|
@ -117,6 +117,12 @@ Route::get('label/{labelAlias}', 'Gallery\LabelController@show')
|
|||||||
Route::get('u/{idOrAlias}', 'Gallery\UserController@show')
|
Route::get('u/{idOrAlias}', 'Gallery\UserController@show')
|
||||||
->name('viewUser')
|
->name('viewUser')
|
||||||
->where('idOrAlias', '.*');
|
->where('idOrAlias', '.*');
|
||||||
|
Route::get('me/confirm-email-change', 'Gallery\UserController@confirmEmailChangeState')
|
||||||
|
->name('userSettings.confirmEmailChangeState')
|
||||||
|
->middleware('auth');
|
||||||
|
Route::post('me/reset-email-change', 'Gallery\UserController@resetEmailChangeState')
|
||||||
|
->name('userSettings.resetEmailChangeState')
|
||||||
|
->middleware('auth');
|
||||||
Route::get('me/settings', 'Gallery\UserController@settings')
|
Route::get('me/settings', 'Gallery\UserController@settings')
|
||||||
->name('userSettings')
|
->name('userSettings')
|
||||||
->middleware('auth');
|
->middleware('auth');
|
||||||
|
Loading…
Reference in New Issue
Block a user