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']);
});