Implemented e-mail confirmations

This commit is contained in:
2018-07-31 22:42:08 +02:00
parent df0e06045f
commit 904e29955d
13 changed files with 270 additions and 27 deletions
@@ -0,0 +1,61 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\EmailConfirmation;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
class ConfirmEmailController extends Controller
{
public function resendConfirmation()
{
$user = user();
/** @var EmailConfirmation[]|Collection $ec */
$ec = $user->emailConfirmations()->valid()->get();
$email = '';
if ($ec->count() == 0) {
user()->sendEmailConfirmationLink($email = $user->email);
} else {
user()->sendEmailConfirmationLink($email = $ec[0]->email);
}
flash()->success("A new confirmation link was sent to your e-mail $email"); // not important, will fade
return back();
}
public function confirmEmailAndLogin(Request $request)
{
$input = $this->validate($request, [
'token' => 'string|required',
]);
$ec = EmailConfirmation::where('token', $input->token)->valid()->first();
if (!$ec) abort(400, "Invalid or expired token.");
$u = $ec->user;
if (!$u) abort(400, "User account does not exist.");
if ($ec->email) $u->email = $ec->email;
$wasConfirmed = $u->confirmed;
$u->confirmed = true;
$u->save();
$ec->delete();
\Auth::login($u, true);
if ($wasConfirmed) {
// user just changed an e-mail
flash()->success("Your new e-mail $ec->email was confirmed!")->important();
} else {
flash()->success("Your e-mail $ec->email was confirmed, your account is now active!")->important();
}
return redirect(route('profile.view', $u->name));
}
}
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\EmailConfirmation;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
@@ -36,7 +37,7 @@ class LoginController extends Controller
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('guest')->except(['logout', 'confirmEmailAndLogin']);
}
public function username()