Tartalomjegyzék
Laravel API Sanctum azonosítás
- Szerző: Sallai András
- Copyright © Sallai András, 2022, 2023
- Web: https://szit.hu
Bevezetés
A Sanctum azonosítás alapértelmezetten rendelkezésre áll a Laravel projektekben.
AuthController
Hozzunk létre egy Auth kontrollert:
php artisan make:controller AuthController
Létrejön:
- app/Http/Controllers/AuthController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class AuthController extends Controller { // }
Először használatba kell venni néhány névteret, majd szükség van 3 függvényre:
//... use App\Models\User; use Illuminate\Support\facades\Auth; class AuthController extends Controller { public function register(Request $request) { $fields = $request->validate([ 'name' => 'required|string', 'email' => 'required|string|unique:users,email', 'password' => 'required|string|confirmed' ]); $user = User::create([ 'name' => $fields['name'], 'email' => $fields['email'], 'password' => bcrypt($fields['password']) ]); $token = $user->createToken('sajatToken')->plainTextToken; $response = [ 'user' => $user, 'token' => $token ]; return response($response, 201); } public function login(Request $request) { if( Auth::attempt([ "name" => $request->name, "password" => $request->password ])) { $authUser = Auth::user(); $success[ "token" ] = $authUser->createToken( "myapptoken" )->plainTextToken; $success[ "name" ] = $authUser->name; return response( $success); }else { return response( "Hiba! A bejelentkezés sikertelen", [ "error" => "Hibás adatok" ]); } } public function logout( Request $request ) { $user = User::where('name', $request->name)->first(); $user->tokens()->where('id', $request->tokenId)->delete(); return response()->json(['message' => 'Kijelentkezve'], 200); } }
Lássuk mit kell kliens oldalon küldeni egy token visszavonásához, azaz kijelentkezéshez. A token visszavonásához elég elküldeni az azonosítót.
{ "name": "janos", "tokenId": "47" }
Úgy is működik, ha az egészet elküldöm:
{ "name": "janos", "token": "47|1OoO3Dn7Gf9YVq0cpuM3YpYZFsquG0HXqgpmsglZ" }
Routing
Route::post('/register', [AuthController::class, 'register']); Route::post('/login', [AuthController::class, 'login']); Route::post('/logout', [AuthController::class, 'logout']);
Regisztráció teszt
JSON tartalom, egy példa regisztrációhoz:
{ "name": "janos", "email": "janos@zold.lan", "password": "titok", "password_confirmation": "titok" }
Védelem beállítása
Azokat a végpontokat, ahol azonosítást szeretnénk, egyszerűen bemásoljuk a Route::group() metódus paramétereként érkező névtelen függvénybe.
Route::get('employees', [EmployeeController::class, 'index']); Route::get('employees/{id}', [EmployeeController::class, 'show']); Route::group(['middleware' => ['auth:sanctum']], function () { Route::post('employees', [EmployeeController::class, 'store']); Route::put('employees/{id}', [EmployeeController::class, 'update']); Route::delete('employees/{id}', [EmployeeController::class, 'destroy']); }); Route::post('/register', [AuthController::class, 'register']); Route::post('/login', [AuthController::class, 'login']);
Login
A következő JSON tartalmat küldjük el a belépéshez:
{ "name": "janos", "password": "titok" }
apiResource használata
Az útvonalak védelme beállítható egyetlen sorral, és használhatunk mellette kivételt is.
Az index metódust külön tesszük, mivel annak nem szeretnénk azonosítást beállítani.
- routes/api.php
//... Route::group(['middleware' => ['auth:sanctum']], function(){ Route::apiResource('employees', EmployeeController::class) ->except('index'); }); Route::get('employees', [EmployeeController::class, 'index']); Route::post('register', [AuthController::class, 'register']); Route::post('login', [AuthController::class, 'login']);
Az except függvény azt mondja, hogy az index() függvény kivétel, azt itt nem határozzuk meg.