Membuat Login Resgister dengan fitur auth di laravel 7

Kemarin admin sudah membahas bagaimana cara membuat login register di Codeigniter 4 dengan fitur auth. Sekarang admin akan membahas tutorial membuat login register dengan fitur auth di laravel 7. 
Seperti yang sudah admin bahas sebelumnya bahwa dengan menggunakan fitur authention kita dapat menemukan banyak keuntungan seperti keamanan data kita, filter user, hak akses dan masih banyak lagi.

Untuk membuat fitur auth di laravel 7 ini tidak terpasang default di framework tapi kita di haruskan untuk menginstal package laravel/ui. 

Menginstall Laravel 7


Bagi kalian yang belum paham cara instalasi laravel 7 kalian bisa klik artikel admin sebelumnya Cara Install Laravel 7

Install laravel/ui


Setelah berhasil menginstal laravel di komputer kita saatnya kita menginstall package laravel/ui untuk membuat auth, caranya adalah ketikan perintah berikut ini : 
composer require laravel/ui

Instal auth dengan Bootstrap

Untuk menginstall auth dengan bootstrap maka ketikan perintah berikut ini :
php artisan ui bootstrap --auth

Install NPM


Install NPM untuk generate view dan assets yang dibutuhkan oleh auth :
npm install

Jalankan / Run NPM

npm run dev

Koneksi Database


Silahkan buat database, setelah itu buka file dengan nama .env edit dan buat koneksi seperti dibawah ini : 

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_auth
DB_USERNAME=root
DB_PASSWORD=12345678

Diatas saya menggunakan nama database laravel_auth silahkan sesuaikan dengan yang ada di komputer kalian untuk username, password dan nama databasenya.

Membuat Migration


Kita akan membuat tabel baru dengan nama users maka ketikan perintah berikut ini :
php artisan make:migration users_table

Setelah melakukan perintah diatas kita akan menemukan file baru di folder "database/migration" silahkan anda buka kalao punya admin 2014_10_12_000000_users_table.php edit seperti berikut ini :
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
            Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

Kemudian silahkan di migrate dengan cara ketikan php artisan migrate

Model User


Sekarang kita buat model untuk user melalui terminal caranya ketikan perintah berikut ini :
php artisan make:model User
Stelah model user berhasil dibuat silahkan buka file model user yang ada di folder app kemudian edit seperti berikut ini :

<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $guard = 'user';
    protected $fillable = [
        'name', 'email', 'password','username','email_verified_at'
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Pada coding diatas kita membuat sebuah guard baru  $guard = 'user'; kemudian kita tambahkan atau kita sesuaikan auth yang ada di config caranya buka file autth.php yang ada di folder config kemudian buka dan edit seperti berikut ini :
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'user' => [
            'driver' => 'session',
            'provider' => 'users', 
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

Membuat Route Login User


Silahkan buat route user dengan menambhkan kode berikut ini :
Route::get('user/login', 'Auth\AdminAuthController@getLogin')->name('user.login');
Route::post('user/login', 'Auth\AdminAuthController@postLogin');

Membuat Controller

Silahkan buat file controler baru dan simpan didalam folder Auth atau terserah kalian, kali ini admin membuatnya didalam folder Auth dengan cara mengetikan perintah berikut ini :
php artisan make:controller Auth/UserAuthController
Setelah file berhasil dibuat silahkan dibuka file tersebut kemudian ubah kodenya seperti berikut ini :
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UserAuthController extends Controller
{
    use AuthenticatesUsers;
    protected $maxAttempts = 3;
    protected $decayMinutes = 2;
    public function __construct()
    {
        $this->middleware('guest:user')->except('postLogout');
    }
    public function getLogin()
    {
        return view('auth.user.login');
    }
    public function postLogin(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:5'
        ]);
        if (auth()->guard('user')->attempt($request->only('email', 'password'))) {
            $request->session()->regenerate();
            $this->clearLoginAttempts($request);
            return redirect()->intended();
        } else {
            $this->incrementLoginAttempts($request);
            return redirect()
                ->back()
                ->withInput()
                ->withErrors(["Incorrect user login details!"]);
        }
      }
    public function postLogout()
    {
        auth()->guard('user')->logout();
        session()->flush();
        return redirect()->route('user.login');
    }
}

Membuat Tampilan Login

Silahkan buat file baru dengan nama login.blade.php kemudian ketikan kode berikut ini :
@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Login User</div>
                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf
                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>
                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
Middleware Untuk Admin

Untuk membuat sebuah hak akses dalam suatu halaman yang di peruntukan user yang sudah login dan dari guard user. maka kita bisa menggunakan middleware auth dengan menmbahkan guard yang digunakan user contoh penulisan middleware di route.
Route::middleware('auth:user')->group(function(){
  // Untuk Route.
});
middleware di controller.
public function __construct()
{
   $this->middleware('auth:user');
}
Membuat Redirect

Agar redirect user di route diarahkan menuju login user maka tambahkan kode berikut ini di file Handler.php yang berada di folder "app/Exceptions/" ubah kode tersebut seperti dibawah ini :
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
use Illuminate\Support\Arr;
class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];
    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }
        $guard = Arr::get($exception->guards(), 0);
        $route = 'login';
        if ($guard == 'user') {
            $route = 'user.login';
        }
        return redirect()->route($route);
    }
    /**
     * Report or log an exception.
     *
     * @param  \Throwable  $exception
     * @return void
     *
     * @throws \Exception
     */
    public function report(Throwable $exception)
    {
        parent::report($exception);
    }
    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Throwable  $exception
     * @return \Symfony\Component\HttpFoundation\Response
     *
     * @throws \Throwable
     */
    public function render($request, Throwable $exception)
    {
        return parent::render($request, $exception);
    }
}

Kode tambahan yang admin masukan mulai dari protected function unauthenticated dst dan juga use Illuminate\Support\Arr;

Membuat User dengan Seeder


Tentunya untuk melakukan uji coba aplikasi maka kita membutuhkan data kali ini admin akan membuat user dengan seeder ketikan perintah berikut ini :
php artisan make:seeder UserTableSeeder
kemudian buka file yang kita buat tadi UserTableSeeder.php yang ada di folder 'database/seeds' kemudian ubah kodenya seperti berikut ini :

<?php
use Illuminate\Database\Seeder;
class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        User::create([
            'name' => 'user',
            'email' => 'user@admin.com',
            'password' => bcrypt(87654321),
        ]);
    }
}

Kemudian jalankan dengan perintah berikut ini : 
php artisan db:seed --class=AdminTableSeeder
Silahkan kalian jalankan dan uji coba aplikasi yang sudah kalian buat ketikan php artisan serve pada terminal kemudian akses http://localhos:8000/ sekian tutorial kali ini semoga bermanfaat. demikian

0 Response to "Membuat Login Resgister dengan fitur auth di laravel 7"

Post a comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel