Laravel 7/6 custom login and registration (authentication) system with example. This tutorial demonstrates, how you can create your first custom login registration application in laravel.
As well as you can download the source code of this laravel custom login, registration, and logout application.
This tutorial step by step guide, how you can create controller, routes, model, and blade views files.
How you can create login & registration form and how to validate the form data on the server-side in laravel applications.
Laravel Custom Login and Registration Tutorial
Follow the below steps and create custom login & registration application in laravel:
- Install Laravel Fresh New Setup
- Setup Database Credentials
- Make Route
- Create Controller & Methods
- Create Blade View
- Run Development Server
- Conclusion
1). Install Laravel Fresh New Setup
First, we need to download the laravel fresh setup. Use the below command and download fresh new laravel setup :
composer create-project --prefer-dist laravel/laravel Blog
2). Setup Database
After successfully install laravel Application, Go to your project .env file and set up database credential and move next step :
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=here your database name here DB_USERNAME=here database username here DB_PASSWORD=here database password here
Next, migrate the table into the database using the below command :
php artisan migrate
3). Make Route
In this step, we will create some routes like custom login route, custom registration route, post data route, and dashboard, etc.
Route::get('login', 'AuthController@index'); Route::post('post-login', 'AuthController@postLogin'); Route::get('registration', 'AuthController@registration'); Route::post('post-registration', 'AuthController@postRegistration'); Route::get('dashboard', 'AuthController@dashboard'); Route::get('logout', 'AuthController@logout');
4). Create Controller
We need to create a controller name AuthController. Use the below command and create Controller :
php artisan make:controller AuthController
After successfully create controller go to app/controllers/AuthController.php and update the below code in your controller:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Validator,Redirect,Response; Use App\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Session; class AuthController extends Controller { public function index() { return view('login'); } public function registration() { return view('registration'); } public function postLogin(Request $request) { request()->validate([ 'email' => 'required', 'password' => 'required', ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { // Authentication passed... return redirect()->intended('dashboard'); } return Redirect::to("login")->withSuccess('Oppes! You have entered invalid credentials'); } public function postRegistration(Request $request) { request()->validate([ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|min:6', ]); $data = $request->all(); $check = $this->create($data); return Redirect::to("dashboard")->withSuccess('Great! You have Successfully loggedin'); } public function dashboard() { if(Auth::check()){ return view('dashboard'); } return Redirect::to("login")->withSuccess('Opps! You do not have access'); } public function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']) ]); } public function logout() { Session::flush(); Auth::logout(); return Redirect('login'); } }
5). Create Blade view
In this step, we need to create three-blade view files. The first is login blade.php and the second one is registration blade.php and the last one is dashboard.blade.php.
The First Login Blade.php
Now you can create login.blade.php file and update the below code into your file:
<!DOCTYPE html> <html> <head> <title>Login Form - Tutsmake.com</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <meta name="csrf-token" content="{{ csrf_token() }}"> <!--Bootsrap 4 CDN--> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="{{url('style.css')}}"> </head> <body> <div class="container-fluid"> <div class="row no-gutter"> <div class="d-none d-md-flex col-md-4 col-lg-6 bg-image"></div> <div class="col-md-8 col-lg-6"> <div class="login d-flex align-items-center py-5"> <div class="container"> <div class="row"> <div class="col-md-9 col-lg-8 mx-auto"> <h3 class="login-heading mb-4">Welcome back!</h3> <form action="{{url('post-login')}}" method="POST" id="logForm"> {{ csrf_field() }} <div class="form-label-group"> <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" > <label for="inputEmail">Email address</label> @if ($errors->has('email')) <span class="error">{{ $errors->first('email') }}</span> @endif </div> <div class="form-label-group"> <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password"> <label for="inputPassword">Password</label> @if ($errors->has('password')) <span class="error">{{ $errors->first('password') }}</span> @endif </div> <button class="btn btn-lg btn-primary btn-block btn-login text-uppercase font-weight-bold mb-2" type="submit">Sign In</button> <div class="text-center">If you have an account? <a class="small" href="{{url('registration')}}">Sign Up</a></div> </form> </div> </div> </div> </div> </div> </div> </div> </body> </html>
Second Is Registration.blade.php
Now you can create registration.blade.php file and update the below code into your file
<!DOCTYPE html> <html> <head> <title>Registration Form - Tutsmake.com</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <meta name="csrf-token" content="{{ csrf_token() }}"> <!--Bootsrap 4 CDN--> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="{{url('style.css')}}"> </head> <body> <div class="container-fluid"> <div class="row no-gutter"> <div class="d-none d-md-flex col-md-4 col-lg-6 bg-image"></div> <div class="col-md-8 col-lg-6"> <div class="login d-flex align-items-center py-5"> <div class="container"> <div class="row"> <div class="col-md-9 col-lg-8 mx-auto"> <h3 class="login-heading mb-4">Register here!</h3> <form action="{{url('post-registration')}}" method="POST" id="regForm"> {{ csrf_field() }} <div class="form-label-group"> <input type="text" id="inputName" name="name" class="form-control" placeholder="Full name" autofocus> <label for="inputName">Name</label> @if ($errors->has('name')) <span class="error">{{ $errors->first('name') }}</span> @endif </div> <div class="form-label-group"> <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" > <label for="inputEmail">Email address</label> @if ($errors->has('email')) <span class="error">{{ $errors->first('email') }}</span> @endif </div> <div class="form-label-group"> <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password"> <label for="inputPassword">Password</label> @if ($errors->has('password')) <span class="error">{{ $errors->first('password') }}</span> @endif </div> <button class="btn btn-lg btn-primary btn-block btn-login text-uppercase font-weight-bold mb-2" type="submit">Sign Up</button> <div class="text-center">If you have an account? <a class="small" href="{{url('login')}}">Sign In</a></div> </form> </div> </div> </div> </div> </div> </div> </div> </body> </html>
Last Dashbaord.blade.php
Now you can create dashboard.blade.php file and update the below code into your file
<!DOCTYPE html> <html> <head> <title>Dashboard - Tutsmake.com</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <meta name="csrf-token" content="{{ csrf_token() }}"> <!--Bootsrap 4 CDN--> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="{{url('style.css')}}"> </head> <body> <div class="container-fluid"> <div class="row no-gutter"> <div class="d-none d-md-flex col-md-4 col-lg-6 bg-image"></div> <div class="col-md-8 col-lg-6"> <div class="login d-flex align-items-center py-5"> <div class="container"> <div class="row"> <div class="col-md-9 col-lg-8 mx-auto"> <h3 class="login-heading mb-4">Welcome Dashboard!</h3> <div class="card"> <div class="card-body"> Welcome {{ ucfirst(Auth()->user()->name) }} </div> <div class="card-body"> <a class="small" href="{{url('logout')}}">Logout</a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </body> </html>
Next step creates the style.css file inside app/public folder and updates the below code in your file:
:root { --input-padding-x: 1.5rem; --input-padding-y: 0.75rem; } .login, .image { min-height: 100vh; } .bg-image { background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/28963/form-bk.jpg'); background-size: cover; background-position: center; } .login-heading { font-weight: 300; } .btn-login { font-size: 0.9rem; letter-spacing: 0.05rem; padding: 0.75rem 1rem; border-radius: 2rem; } .form-label-group { position: relative; margin-bottom: 1rem; } .form-label-group>input, .form-label-group>label { padding: var(--input-padding-y) var(--input-padding-x); height: auto; border-radius: 2rem; } .form-label-group>label { position: absolute; top: 0; left: 0; display: block; width: 100%; margin-bottom: 0; /* Override default `<label>` margin */ line-height: 1.5; color: #495057; cursor: text; /* Match the input under the label */ border: 1px solid transparent; border-radius: .25rem; transition: all .1s ease-in-out; } .form-label-group input::-webkit-input-placeholder { color: transparent; } .form-label-group input:-ms-input-placeholder { color: transparent; } .form-label-group input::-ms-input-placeholder { color: transparent; } .form-label-group input::-moz-placeholder { color: transparent; } .form-label-group input::placeholder { color: transparent; } .form-label-group input:not(:placeholder-shown) { padding-top: calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3)); padding-bottom: calc(var(--input-padding-y) / 3); } .form-label-group input:not(:placeholder-shown)~label { padding-top: calc(var(--input-padding-y) / 3); padding-bottom: calc(var(--input-padding-y) / 3); font-size: 12px; color: #777; } /* Fallback for Edge -------------------------------------------------- */ @supports (-ms-ime-align: auto) { .form-label-group>label { display: none; } .form-label-group input::-ms-input-placeholder { color: #777; } } /* Fallback for IE -------------------------------------------------- */ @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .form-label-group>label { display: none; } .form-label-group input:-ms-input-placeholder { color: #777; } } .error{ color:red; margin-left: 10px; }
6). Run Development Server
We need to start the development server. Use the PHP artisan serve command and start your server :
php artisan serve
If you want to run the project diffrent port so use this below command
php artisan serve --port=8080
Now we are ready to run our example so run bellow command to quick run.
http://localhost:8000/login
Conclusion
In this tutorial, you have learned step by step, how to create custom login and registration applications or projects in laravel 6. Our examples run quickly.
You may like
If you want to download the full project source code and run the project your system. So let’s follow the below steps:
Step 1. Download the source code from github. Click here
Step 2. Extract the zip file in your folder
Step 3. Open your project root directory and change database detail
Step 4. Open command prompt, go to project directory like cd/xampp/htdocs/your_project_name
Step 5. Run php artisan migrate
If you have any questions or thoughts to share, use the comment form below to reach us.
Great tutorial, nice work
thanks a lot dude for,
Laravel 6 Custom Login Registration Example Tutorial