Membuat API Login Logout Laravel

Tentang Blog

Membuat API Login Logout Laravel

Login menggunakan tabel student bukan user lagi, jadi buat model student seperti user, namun sebelumnya copas ini di terminal project :

1. php artisan make:controller API/MobileController

2. composer require laravel/sanctum

3. php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

4. php artisan install:api

5. php artisan:migrate (karena ada tabel baru)


Kemudian membuat model stident seperti ini

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Notifications\Notifiable;



class Student extends Authenticatable
{
use HasApiTokens, Notifiable;

protected $table = 'students';

protected $fillable = ['nis', 'name', 'email', 'user_id', 'password'];
public $incrementing = false;
protected $keyType = 'string';
protected static function boot()
{
parent::boot();

static::creating(function ($model) {
if (!$model->id) {
$model->id = Str::uuid()->toString();
}
});
}
public function scopeSearch($query, $value = null)
{
if ($value) {
return $query->where(function ($q) use ($value) {
$q->where('student', 'like', '%' . $value . '%')
->orWhare('nis', 'like', '%. $value .%')
->orWhare('name', 'like', '%. $value .%')->orWhare('email', 'like', '%. $value .%');
});
}

return $query;
}
}




ini di MobileController.php

<?php

namespace App\Http\Controllers\API;

use App\Models\Student;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;

class MobileController extends Controller
{

// LOGIN
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required'
]);

$user = Student::where('email', $request->email)->first();

if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json([
'status' => false,
'message' => 'Login gagal'
], 401);
}

$token = $user->createToken('api-token')->plainTextToken;

return response()->json([
'status' => true,
'message' => 'Login berhasil',
'token' => $token
]);
}

// LOGOUT
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();

return response()->json([
'status' => true,
'message' => 'Logout berhasil'
]);
}

// PROFILE
public function profile(Request $request)
{
return response()->json($request->user());
}
}


ini di api.php
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\API\AuthController;
use App\Http\Controllers\API\MobileController;

// PUBLIC
Route::post('/login', [MobileController::class, 'login']);

// PROTECTED
Route::middleware('auth:sanctum')->group(function () {
Route::post('/logout', [MobileController::class, 'logout']);
Route::get('/profile', [MobileController::class, 'profile']);
});