fix: generate temporary email verification link with email hash included
This commit is contained in:
parent
d70b39f445
commit
ba3cc6fe91
|
|
@ -344,20 +344,20 @@ class AuthController extends Controller
|
|||
return redirect('/user');
|
||||
}
|
||||
|
||||
public function verify(Request $request)
|
||||
public function verify(Request $request, User $user)
|
||||
{
|
||||
if (!option('require_verification')) {
|
||||
throw new PrettyPageException(trans('user.verification.disabled'), 1);
|
||||
}
|
||||
|
||||
abort_unless($request->hasValidSignature(false), 403, trans('auth.verify.invalid'));
|
||||
abort_unless($request->hasValidSignature(false) && hash_equals((string)$request->route('hash'), sha1($user->email)), 403, trans('auth.verify.invalid'));
|
||||
|
||||
return view('auth.verify');
|
||||
}
|
||||
|
||||
public function handleVerify(Request $request, User $user)
|
||||
{
|
||||
abort_unless($request->hasValidSignature(false), 403, trans('auth.verify.invalid'));
|
||||
abort_unless($request->hasValidSignature(false) && hash_equals((string)$request->route('hash'), sha1($user->email)), 403, trans('auth.verify.invalid'));
|
||||
|
||||
['email' => $email] = $request->validate(['email' => 'required|email']);
|
||||
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ class UserController extends Controller
|
|||
return json(trans('user.verification.verified'), 1);
|
||||
}
|
||||
|
||||
$url = URL::signedRoute('auth.verify', ['user' => $user], null, false);
|
||||
$url = URL::temporarySignedRoute('auth.verify', Carbon::now()->addHour(), ['user' => $user, 'hash' => sha1($user->email)], false);
|
||||
|
||||
try {
|
||||
Mail::to($user->email)->send(new EmailVerification(url($url)));
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class SendEmailVerification
|
|||
public function handle(User $user)
|
||||
{
|
||||
if (option('require_verification')) {
|
||||
$url = URL::signedRoute('auth.verify', ['user' => $user->uid], null, false);
|
||||
$url = URL::temporarySignedRoute('auth.verify', Carbon::now()->addHour(), ['user' => $user, 'hash' => sha1($user->email)], false);
|
||||
|
||||
try {
|
||||
Mail::to($user->email)->send(new EmailVerification(url($url)));
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@ Route::prefix('auth')->name('auth.')->group(function () {
|
|||
Route::post('bind', 'AuthController@fillEmail')->name('verify');
|
||||
});
|
||||
|
||||
Route::get('verify/{user}', 'AuthController@verify')->name('verify');
|
||||
Route::post('verify/{user}', 'AuthController@handleVerify')->name('handle.verify');
|
||||
Route::get('verify/{user}/{hash}', 'AuthController@verify')->name('verify');
|
||||
Route::post('verify/{user}/{hash}', 'AuthController@handleVerify')->name('handle.verify');
|
||||
});
|
||||
|
||||
Route::prefix('user')
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user