Tartalomjegyzék

< Laravel API

Laravel API Sanctum azonosítás

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.