I have created a registration feature in my project where users are sent a link to verify their email once they register an account.
However, after sending this email to users, laravel returns to the a blank page of the register route instead of the verify-email
route.
Here is my RegisterController file
class RegisterController extends Controller
{
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/login';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
public function showRegistrationForm()
{
return view('user.auth.register');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'first_name' => ['required', 'string', 'max:255'],
'last_name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed', 'regex:/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
// return redirect($this->redirectPath())->with('message', 'Your registration was successful! Login below');
}
}
Here is my routes\web.php
file
Route::get('/', function () {
return view('user.auth.login');
});
// Routes for only authenticated users
Route::get('/user/verify-email', function () {
return view('user.auth.verify-email');
})->middleware('auth')->name('verification.notice');
Route::get('/user/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
$request->fulfill();
return redirect('/account');
})->middleware(['auth', 'signed'])->name('verification.verify');
Route::post('/user/verify-email/verification-notification', function (Request $request) {
$request->user()->sendEmailVerificationNotification();
return back()->with('message', 'Verification link has been re-sent, Please check your email!');
})->middleware(['auth', 'throttle:6,1'])->name('verification.send');
//Route to logout authenticated user
Route::get('/account/logout', [AuthLoginController::class, 'logout'])->name('user.account.logout')->middleware(['auth']);
// Routes for only authenticated & verified users
Route::group(
[
'middleware' => ['auth', 'verified'],
],
function () {
// Route to main account dashboard of user
Route::get('/account', function () {
return view('user.account.index');
})->name('user.account.index');
// Route to account profile of user
Route::get('/account/profile', function () {
return view('user.account.profile');
})->name('user.account.profile');
}
);
// Laravel's route to login page and registration page
// Automatcially links to custom login page and registration page
Auth::routes();
And here is my verify-email
file
<div >
<br><br>
@if (Session::has('message'))
<small >{{ Session::get('message') }}</small>
<br><br><br>
@endif
<h2 style="color:whitesmoke;font-size:30px">Email Verification Sent</h2>
<br>
<p>Please click on the link sent to your email, to complete your registration! </p>
<form action="{{ route('verification.send') }}" method="post">
@csrf
<br>
<button type="submit" style="color:whitesmoke;background:none;padding:15px; border:1px solid whitesmoke">Resend
Verification Link <i style="padding-left: 5px;"></i></button>
<a href="{{ route('user.account.logout') }}" style="color:whitesmoke;background:none;padding:15px; border:1px solid whitesmoke">Logout <i style="padding-left: 5px;"></i></a>
</form>
</div>
CodePudding user response:
in your ur register
protected function create(array $data)
{
$user = User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
Auth::login($user);
return redirect('verify-email');
}
Don't forget to add Auth in user controller
CodePudding user response:
Redirect in register function to verify route
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return redirect(route('verification.notice'));
}