Enabled password resets

This commit is contained in:
Deon George 2021-06-13 23:00:26 +10:00
parent 2cae5d984c
commit 55fcfa2e4a
9 changed files with 335 additions and 159 deletions

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}

View File

@ -50,7 +50,7 @@ class RegisterController extends Controller
protected function validator(array $data) protected function validator(array $data)
{ {
return Validator::make($data, [ return Validator::make($data, [
'name' => ['required', 'string', 'max:255'], 'name' => ['required', 'string', 'min:3', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'], 'password' => ['required', 'string', 'min:8', 'confirmed'],
]); ]);

View File

@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
class User extends Authenticatable class User extends Authenticatable implements MustVerifyEmail
{ {
use HasFactory, Notifiable; use HasFactory, Notifiable;

View File

@ -5,18 +5,6 @@
@endsection @endsection
@section('content') @section('content')
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="check-circle-fill" fill="currentColor" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
</symbol>
<symbol id="info-fill" fill="currentColor" viewBox="0 0 16 16">
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
</symbol>
<symbol id="exclamation-triangle-fill" fill="currentColor" viewBox="0 0 16 16">
<path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
</symbol>
</svg>
@if(isset($login_note) AND $login_note) @if(isset($login_note) AND $login_note)
<div class="row"> <div class="row">
<div class="col-8 m-auto"> <div class="col-8 m-auto">
@ -32,39 +20,6 @@
</div> </div>
@endisset @endisset
@if (Session::has('error'))
<div class="row">
<div class="col-8 m-auto">
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<h4 class="alert-heading">
<svg class="bi flex-shrink-0 me-2" width="24" height="24" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
<strong>Whoops!</strong> Some is not right...
</h4>
{{ Session::get('error') }}</li>
</div>
</div>
</div>
@endif
@if (count($errors) > 0)
<div class="row">
<div class="col-8 m-auto">
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">
<svg class="bi flex-shrink-0 me-2" width="24" height="24" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
<strong>Whoops!</strong> Some is not right...
</h4>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
</div>
</div>
@endif
<div class="row"> <div class="row">
<div class="col-6 m-auto"> <div class="col-6 m-auto">
<div class="greyframe titledbox shadow0xb0 text-center"> <div class="greyframe titledbox shadow0xb0 text-center">
@ -78,10 +33,16 @@
<label for="email" class="form-label">Email</label> <label for="email" class="form-label">Email</label>
<div class="input-group has-validation"> <div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-person-badge"></i></span> <span class="input-group-text"><i class="bi bi-person-badge"></i></span>
<input type="text" class="form-control" id="email" placeholder="Email" name="email" required> <input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" required autocomplete="email" autofocus>
<div class="invalid-feedback"> @error('email')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your email is required. Your email is required.
</div> </span>
@enderror
</div> </div>
</div> </div>
</div> </div>
@ -92,9 +53,9 @@
<div class="input-group has-validation"> <div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-key-fill"></i></span> <span class="input-group-text"><i class="bi bi-key-fill"></i></span>
<input type="password" class="form-control" id="password" placeholder="Password" name="password" required> <input type="password" class="form-control" id="password" placeholder="Password" name="password" required>
<div class="invalid-feedback"> <span class="invalid-feedback">
Your password is required. Your password is required.
</div> </span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,61 @@
@extends('layouts.auth')
@section('htmlheader_title')
Forgot Password
@endsection
@section('content')
@if (Session('status'))
<div class="row">
<div class="col-8 m-auto">
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
</div>
</div>
@endif
<div class="row">
<div class="col-6 m-auto">
<div class="greyframe titledbox shadow0xb0 text-center">
<h2 class="cap">Forgot Password</h2>
<form class="row g-0 needs-validation" method="post" action="{{ route('password.email') }}" novalidate>
@csrf
<div class="row">
<div class="col-12">
<label for="email" class="form-label">Email</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ old('email') }}" autocomplete="email" autofocus required>
@error('email')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your email is required.
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<a href="{{ url('/') }}" class="btn btn-danger">Cancel</a>
<button type="submit" name="submit" class="btn btn-success mr-0 float-end">Reset</button>
</div>
</div>
<div class="row pt-4">
<div class="col-12">
<a class="link-danger" href="{{ url('login') }}">Login</a>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,89 @@
@extends('layouts.auth')
@section('htmlheader_title')
Reset Password
@endsection
@section('content')
@if (Session('status'))
<div class="row">
<div class="col-8 m-auto">
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
</div>
</div>
@endif
<div class="row">
<div class="col-6 m-auto">
<div class="greyframe titledbox shadow0xb0 text-center">
<h2 class="cap">Reset Password</h2>
<form class="row g-0 needs-validation" method="post" action="{{ route('password.update') }}" novalidate>
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<div class="row">
<div class="col-12">
<label for="email" class="form-label">Email</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your email is required.
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="password" class="form-label">Password</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-key-fill"></i></span>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" placeholder="Password" name="password" required>
@error('password')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your password is required.
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="password" class="form-label">Password Again</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-key-fill"></i></span>
<input type="password" class="form-control" id="password" placeholder="Password Again" name="password_confirmation" required>
<div class="invalid-feedback">
Please re-enter your password.
</div>
</div>
</div>
</div>
<div class="row pb-4">
<div class="col-12">
<a href="{{ url('/') }}" class="btn btn-danger">Cancel</a>
<button type="submit" name="submit" class="btn btn-success mr-0 float-end">Sign In</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@ -5,112 +5,98 @@
@endsection @endsection
@section('content') @section('content')
<div class="col-6 pt-2 pb-2 m-auto bg-blue"> <div class="row">
<div class="login-logo"> <div class="col-6 m-auto">
<a>{!! config('app.name_html_long') !!}</a> <div class="greyframe titledbox shadow0xb0 text-center">
</div> <h2 class="cap">Register</h2>
@if (count($errors) > 0) <form class="row g-0 needs-validation" method="post" novalidate>
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('message.someproblems') }}<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@if (Session::has('error'))
<div class="alert alert-danger">
<strong>Whoops!</strong> {{ trans('message.someproblems') }}<br><br>
<ul>
<li>{{ Session::get('error') }}</li>
</ul>
</div>
@endif
<!-- /.login-logo -->
<div class="">
<div class="xcard-body">
<div class="text-light text-center p-3 pb-4"><h4>Register</h4></div>
<form method="post">
{{ csrf_field() }} {{ csrf_field() }}
<div class="row"> <div class="row">
<div class="col-3 text-right">
Name:
</div>
<div class="col-8">
<div class="input-group mb-3">
<input type="text" name="name" class="form-control" placeholder="Name">
</div>
</div>
</div>
<div class="row">
<div class="col-3 text-right">
Email:
</div>
<div class="col-8">
<div class="input-group mb-3">
<input type="email" name="email" class="form-control" placeholder="Email">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-envelope fa-fw"></i></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-3 text-right">
Password:
</div>
<div class="col-8">
<div class="input mb-3">
<input type="password" name="password" class="form-control" placeholder="Password">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-key fa-fw"></i></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-3 text-right">
Password Again:
</div>
<div class="col-8">
<div class="input mb-3">
<input type="password" name="password_confirmation" class="form-control" placeholder="Password">
<div class="input-group-append">
<span class="input-group-text"><i class="fas fa-key fa-fw"></i></span>
</div>
</div>
</div>
</div>
<div class="row">
<!-- /.col -->
<div class="col-12"> <div class="col-12">
<button type="submit" name="submit" class="btn btn-lg btn-success mr-0 float-right">Register</button> <label for="name" class="form-label">Name</label>
<a href="{{ url('/') }}" class="btn btn-lg btn-primary float-right">Cancel</a> <div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-person-square"></i></span>
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" placeholder="Full Name" name="name" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your name is required.
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="email" class="form-label">Email</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-person-badge"></i></span>
<input type="text" class="form-control @error('email') is-invalid @enderror" id="email" placeholder="Email" name="email" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<span class="invalid-feedback">
Your email is required.
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="password" class="form-label">Password</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-key-fill"></i></span>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" placeholder="Password" name="password" required>
@error('password')
<span class="invalid-feedback" role="alert">
{{ $message }}
</span>
@else
<div class="invalid-feedback">
Your password is required.
</div>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="password" class="form-label">Password Again</label>
<div class="input-group has-validation">
<span class="input-group-text"><i class="bi bi-key-fill"></i></span>
<input type="password" class="form-control" id="password_confirmation" placeholder="Password Again" name="password_confirmation" required>
<div class="invalid-feedback">
Please re-enter your password.
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<a href="{{ url('/') }}" class="btn btn-danger">Cancel</a>
<button type="submit" name="submit" class="btn btn-success mr-0 float-end">Sign In</button>
</div> </div>
<!-- /.col -->
</div> </div>
</form> </form>
<p class="mb-2"> <div class="row pt-4">
<a name="login" href="{{ url('login') }}">Login</a> <div class="col-12">
</p> <a class="link-danger" href="{{ url('login') }}">Login</a>
</div> </div>
<!-- /.login-card-body --> </div>
</div>
</div> </div>
</div> </div>
<!-- /.login-box -->
@endsection @endsection

View File

@ -0,0 +1,37 @@
@extends('layouts.auth')
@section('htmlheader_title')
Verify your Email
@endsection
@section('content')
@if (Session('resent'))
<div class="row">
<div class="col-8 m-auto">
<div class="alert alert-success alert-dismissible" role="alert">
{{ __('A fresh verification link has been sent to your email address.') }}
</div>
</div>
</div>
@endif
<div class="row">
<div class="col-6 m-auto">
<div class="greyframe titledbox shadow0xb0 text-center">
<h2 class="cap">Verify</h2>
<form class="row" method="post" action="{{ route('verification.resend') }}" novalidate>
@csrf
<div class="row">
<div class="col-12">
{{ __('Before proceeding, please check your email for a verification link.') }}
{{ __('If you did not receive the email') }},
<button type="submit" class="btn btn-link p-0" style="text-decoration: none;line-height: 1.0;">{{ __('click here to request another') }}</button>.
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@ -30,6 +30,7 @@ Route::get('logout',[LoginController::class,'logout']);
Route::redirect('/','about'); Route::redirect('/','about');
Route::view('about','about'); Route::view('about','about');
Route::middleware(['verified'])->group(function () {
Route::get('ftn/domain',[DomainController::class,'home']); Route::get('ftn/domain',[DomainController::class,'home']);
Route::match(['get','post'],'ftn/domain/addedit/{o?}',[DomainController::class,'add_edit']) Route::match(['get','post'],'ftn/domain/addedit/{o?}',[DomainController::class,'add_edit'])
->where('o','[0-9]+'); ->where('o','[0-9]+');
@ -43,3 +44,4 @@ Route::match(['get','post'],'ftn/zone/addedit/{o?}',[ZoneController::class,'add_
->where('o','[0-9]+'); ->where('o','[0-9]+');
Route::get('ftn/network/{name}',[HomeController::class,'network']); Route::get('ftn/network/{name}',[HomeController::class,'network']);
});