1
0
forked from metin2/web

Finished registration and e-mail verification

This commit is contained in:
2023-07-31 08:35:40 +03:00
parent 8b5ef5211b
commit 2f230b9608
13 changed files with 283 additions and 27 deletions

View File

@ -1,9 +1,10 @@
<?php
namespace App\Http\Controllers;
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;

View File

@ -0,0 +1,80 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Hashing\MySQLHasher;
use App\Http\Controllers\Controller;
use App\Models\Account;
use App\Models\Enums\AccountStatusEnum;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\View\View;
class RegisterController extends Controller
{
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Validation\Validator
*/
protected function validator(array $data): \Illuminate\Validation\Validator
{
return Validator::make($data, [
'login' => ['required', 'string', 'min:5', 'max:16', 'unique:account.account'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:account.account'],
'password' => ['required', 'string', 'min:5', 'max:16'],
'tac' => ['required'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return Account
*/
protected function create(array $data): Account
{
$account = new Account();
$account->login = $data['login'];
$account->email = $data['email'];
$account->password = (new MySQLHasher)->make($data['password']);
$account->status = AccountStatusEnum::NOT_AVAILABLE;
$account->saveOrFail();
return $account;
}
/**
* Show the application registration form.
*
* @return View
*/
public function showRegistrationForm(): View
{
return view('user/registration/register');
}
/**
* Handle a registration request for the application.
*
* @param Request $request
* @return RedirectResponse
* @throws ValidationException
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
Auth::guard()->login($user);
return redirect('user/verification/notice');
}
}

View File

@ -0,0 +1,69 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected string $redirectTo = 'user/administration';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
/**
* Show the email verification notice.
*
* @param Request $request
* @return RedirectResponse|View
*/
public function show(Request $request): View|RedirectResponse
{
return $request->user()->hasVerifiedEmail()
? redirect($this->redirectPath())
: view('user/registration/verification-notice');
}
/**
* The user has been verified.
*
* @param Request $request
* @return View
*/
protected function verified(Request $request): View
{
return view('user/registration/registration-success');
}
}

View File

@ -49,7 +49,6 @@ class Account extends User implements MustVerifyEmail
*/
protected $fillable = [
'login',
'password',
'email',
];
@ -71,7 +70,6 @@ class Account extends User implements MustVerifyEmail
*/
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'status' => AccountStatusEnum::class
];