create the project
composer create-project laravel/laravel:^8.0 test03 cd test03
edit .env file to setup a db connection, for this test I will use sqlite
DB_CONNECTION=sqlite DB_DATABASE=/var/www/test03/storage/database.sqlite
laravel app comes with a default User model and migration file
sqlite3 /var/www/test03/storage/database.sqlite php artisan migrate
Create Auth Controller
php artisan make:controller CustomAuthController jedit app/Http/Controllers/CustomAuthController.php
<?php namespace App\Http\Controllers; use App\Models\User; use Hash; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Session; // class CustomAuthController extends Controller { public function index() { return view('auth.login'); } public function customLogin(Request $request) { $request->validate([ 'email' => 'required', 'password' => 'required', ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { return redirect('dashboard')->withSuccess('Signed in'); } else { return redirect("login")->withSuccess('Login details are not valid'); } } public function registration() { return view('auth.registration'); } public function customRegistration(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|min:12', ]); $data = $request->all(); $check = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); return redirect("dashboard")->withSuccess('You have signed-in'); } public function dashboard() { if (Auth::check()) { return view('dashboard'); } return redirect("login")->withSuccess('You are not allowed to access'); } public function signOut() { Session::flush(); Auth::logout(); return Redirect('login'); } }
Create the corresponding Auth Routes in routes/web.php
// login Route::get('login', [CustomAuthController::class, 'index'])->name('login'); Route::post('custom-login', [CustomAuthController::class, 'customLogin'])->name('login.custom'); Route::get('registration', [CustomAuthController::class, 'registration'])->name('register-user'); Route::post('custom-registration', [CustomAuthController::class, 'customRegistration'])->name('register.custom'); Route::get('signout', [CustomAuthController::class, 'signOut'])->name('signout'); Route::get('dashboard', [CustomAuthController::class, 'dashboard']);
create the views
touch resources/views/layout.blade.php mkdir resources/views/auth touch resources/views/auth/login.blade.php touch resources/views/auth/registration.blade.php
layout:
<!DOCTYPE html> <html> <head> <title>Laravel 8 Custom Login</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <nav class="navbar navbar-light navbar-expand-lg mb-5" style="background-color: #ccffcc;"> <div class="container"> <a class="navbar-brand mr-auto" href="#">YOUR_LOGO</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> @guest <li class="nav-item"> <a class="nav-link" href="{{ route('login') }}">Login</a> </li> <li class="nav-item"> <a class="nav-link" href="{{ route('register-user') }}">Register</a> </li> @else <li class="nav-item"> <a class="nav-link" href="{{ route('signout') }}">Logout</a> </li> @endguest </ul> </div> </div> </nav> @yield('content') </body> </html>
register template:
@extends('layout') @section('content') <main class="signup-form"> <div class="cotainer"> <div class="row justify-content-center"> <div class="col-md-4"> <div class="card"> <h3 class="card-header text-center">Register User</h3> <div class="card-body"> <form action="{{ route('register.custom') }}" method="POST"> @csrf <div class="form-group mb-3"> <input type="text" placeholder="Name" id="name" class="form-control" name="name" required autofocus> @if ($errors->has('name')) <span class="text-danger">{{ $errors->first('name') }}</span> @endif </div> <div class="form-group mb-3"> <input type="text" placeholder="Email" id="email_address" class="form-control" name="email" required autofocus> @if ($errors->has('email')) <span class="text-danger">{{ $errors->first('email') }}</span> @endif </div> <div class="form-group mb-3"> <input type="password" placeholder="Password" id="password" class="form-control" name="password" required> @if ($errors->has('password')) <span class="text-danger">{{ $errors->first('password') }}</span> @endif </div> <div class="form-group mb-3"> <div class="checkbox"> <label><input type="checkbox" name="remember"> Remember Me</label> </div> </div> <div class="d-grid mx-auto"> <button type="submit" class="btn btn-dark btn-block">Sign up</button> </div> </form> </div> </div> </div> </div> </div> </main> @endsection
login template:
@extends('layout') @section('content') <main class="login-form"> <div class="cotainer"> <div class="row justify-content-center"> <div class="col-md-4"> <div class="card"> <h3 class="card-header text-center">Login</h3> <div class="card-body"> <form method="POST" action="{{ route('login.custom') }}"> @csrf <div class="form-group mb-3"> <input type="text" placeholder="Email" id="email" class="form-control" name="email" required autofocus> @if ($errors->has('email')) <span class="text-danger">{{ $errors->first('email') }}</span> @endif </div> <div class="form-group mb-3"> <input type="password" placeholder="Password" id="password" class="form-control" name="password" required> @if ($errors->has('password')) <span class="text-danger">{{ $errors->first('password') }}</span> @endif </div> <div class="form-group mb-3"> <div class="checkbox"> <label> <input type="checkbox" name="remember"> Remember Me </label> </div> </div> <div class="d-grid mx-auto"> <button type="submit" class="btn btn-dark btn-block">Signin</button> </div> </form> </div> </div> </div> </div> </div> </main> @endsection
Le opinioni espresse nel mio blog sono solo questo: mie opinioni.
In nessun modo rappresento le opinioni dei miei clienti in questa sede.