Para pengrajin yang terhormat, terkadang kami perlu melarang pengguna dari aplikasi kami. Ini fitur penting. Autentikasi Laravel menyediakan banyak fungsi. Sayangnya, mereka tidak menyediakan opsi ban / unban. Pada artikel ini, saya akan membuat fitur ban & unban. Saya sedang menguji di Laravel 8.22.1 .
Daftar Isi
Tambahkan Kolom ke Tabel Users
Pertama, kita perlu menambahkan kolom ke tabel users yang disebut banned_till . Jalankan perintah ini untuk membuat file migrasi untuk membuat kolom baru:
php artisan make:migration add_banned_till_to_users_table
Kemudian buka file migrasi dari database/migrations dan update up() metode seperti ini:
timestamp_add_banned_till_to_users_table.php
class AddBannedTillToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('banned_till')->nullable();
});
}
// --- REST CODE
}
Kemudian buka Model pengguna dari directory app/Models dan perbarui $fillable
array seperti:
User.php
protected $fillable = [
'name',
'email',
'password',
'banned_till'
];
Sekarang migrasikan migrations:
php artisan migrate:fresh
Buat Middleware
Kami membutuhkan middleware untuk memeriksa auth pengguna dilarang atau tidak. Jalankan perintah ini untuk membuat middleware:
php artisan make:middleware IsUserBanned
Buka middleware IsUserBanned dari path app/Http/Middleware. Kemudian tempel kode ini:
IsUserBanned .php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
class IsUserBanned
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (auth()->check() && auth()->user()->banned_till != null) {
if (auth()->user()->banned_till == 0) {
$message = 'Your account has been banned permanently.';
}
if (now()->lessThan(auth()->user()->banned_till)) {
$banned_days = now()->diffInDays(auth()->user()->banned_till) + 1;
$message = 'Your account has been suspended for ' . $banned_days . ' ' . Str::plural('day', $banned_days);
}
auth()->logout();
return redirect()->route('login')->with('message', $message);
}
return $next($request);
}
}
Sekarang mari daftarkan middleware kita ke file app/Http/Kernel.php. Di file Kernel, ada grup bernama $middlewareGroups
. Kami harus mengatur jalur middleware kami ke grup web seperti:
Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
// --- MORE
\App\Http\Middleware\IsUserBanned::class,
],
// --- REST CODE
];
Middleware kami berhasil terdaftar.
Perbarui File Login Balde
Kita harus menambahkan div alert ke file resources/views/auth/login.blade.php:
login.blade.php
<!-- ... -->
<div class="card-body">
@if (session('message'))
<div class="alert alert-danger">{{ session('message') }}</div>
@endif
<form method="POST" action="{{ route('login') }}">
@csrf
<!-- ... -->
</form>
</div>
<!-- ... -->
Cekal Pengguna / User
Kami telah menyelesaikan semua langkah yang diperlukan. Sekarang mari kita cekal pengguna. Kita perlu menyetel nilai timestamp sebagai nilai bidang banned_till . Lihat contohnya:
use App\Models\User;
use Carbon\Carbon;
public function ban()
{
// ban for days
$ban_for_next_7_days = Carbon::now()->addDays(7);
$ban_for_next_14_days = Carbon::now()->addDays(14);
$ban_permanently = 0;
// ban user
$user_id = 1;
$user = User::find($user_id);
$user->banned_till = $ban_for_next_7_days;
$user->save();
}
Jika kita ingin mencekal pengguna secara permanen , kita harus menyetel nilai bidang banned_till ke 0 (nol).
Periksa Status Banned
Kami dapat dengan mudah memeriksa status dilarang pengguna. Berikut contohnya:
use App\Models\User;
use Illuminate\Support\Str;
public function bannedStatus()
{
$user_id = 1;
$user = User::find($user_id);
$message = "The user is not banned";
if ($user->banned_till != null) {
if ($user->banned_till == 0) {
$message = "Banned Permanently";
}
if (now()->lessThan($user->banned_till)) {
$banned_days = now()->diffInDays($user->banned_till) + 1;
$message = "Suspended for " . $banned_days . ' ' . Str::plural('day', $banned_days);
}
}
dd($message);
}
Batalkan Pelarangan Pengguna / User
Untuk membatalkan pencekalan pengguna, kita harus menyetel nilai banned_till ke null .
use App\Models\User;
public function unban()
{
$user_id = 1;
$user = User::find($user_id);
$user->banned_till = null;
$user->save();
}
Keluaran
Coba lihat ouputsnya. Larangan selama 7 hari:
Dicekal secara permanen:
Itu saja, pengrajin. Terima kasih sudah membaca.🙂
laravel