Maison  >  Article  >  développement back-end  >  Développement PHP : utilisez Laravel Sanctum pour implémenter la certification de sécurité des applications SPA

Développement PHP : utilisez Laravel Sanctum pour implémenter la certification de sécurité des applications SPA

WBOY
WBOYoriginal
2023-06-14 11:37:091503parcourir

Laravel Sanctum est une bibliothèque légère d'authentification utilisateur officiellement recommandée par le framework Laravel. Elle est conçue pour fournir une authentification simple et moderne pour les applications à page unique (SPA) et les applications mobiles. Cet article explique comment utiliser Laravel Sanctum pour implémenter l'authentification de sécurité pour les applications SPA.

1. Installez Laravel
Vous devez d'abord installer Laravel Vous pouvez installer la dernière version de Laravel via composer :

composer create-project --prefer-. dist laravel/laravel your-project-name

2. Configurez Sanctum
Après avoir installé Laravel, vous devez d'abord exécuter la commande suivante :

. composer require laravel/sanctum

Dans les versions inférieures à Laravel 5.5, vous devez ajouter des fournisseurs de services et des façades dans le fichier config/app.php :

'providers' => [

...
LaravelSanctumSanctumServiceProvider::class,

],

'aliases' => [

...
'Sanctum' => LaravelSanctumSanctum::class,

],

Dans Laravel 5.5 et ci-dessus, pas besoin d'ajouter des prestataires ou des façades manuellement.

Vous devez ensuite effectuer une migration de base de données pour créer les tables requises par Sanctum :

php artisan migrate

Si votre application nécessite une authentification SPA, vous devez ajouter votre domaine d'application et vos domaines de confiance dans le fichier config/cors.php. Dans l'exemple ci-dessous, nous supposons que vous créez une API backend avec une application frontend :

'paths' => ['api/*', 'sanctum/csrf-cookie'] ,#🎜🎜 #

'allowed_methods' => ['*'],

'allowed_origins' => ['http://votre-app-url.com'] ,#🎜🎜 #

'allowed_origins_patterns' => [],

'allowed_headers' => ['*'],

'exposed_headers' = >

'max_age' => false,

'supports_credentials' => true,

3. Créez une API et un contrôleur d'authentification #🎜🎜 #Crée un fichier index.blade.php dans resources/views pour afficher l'interface SPA.

Écrivez les routes API dans routes/api.php. Nous créons ici une route de test pour renvoyer les informations utilisateur de l'utilisateur actuellement authentifié :

Route::middleware('auth:sanctum')->get('/user', function (Request $ request) {

return $request->user();

});

Ensuite, nous devons ajouter un contrôleur spécifique à l'application SPA pour créer et gérer les jetons Sanctum. Ce contrôleur est chargé de créer des jetons et d'émettre des cookies d'authentification pour les utilisateurs.

Créez d'abord un contrôleur API dans le dossier app/Http/Controllers, tel que AuthController :

php artisan make:controller API/AuthController

#🎜🎜 # Ajoutez ensuite les méthodes d'enregistrement et de connexion dans AuthController :

public function register(Request $request)

{

$request->validate([
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|unique:users|max:255',
    'password' => 'required|string|min:8|confirmed'
]);

$user = new User([
    'name' => $request->name,
    'email' => $request->email,
    'password' => Hash::make($request->password)
]);

$user->save();

return response()->json([
    'message' => 'Successfully registered'
], 201);

}


public function login(Demande $request)

{

$request->validate([
    'email' => 'required|string|email',
    'password' => 'required|string',
    'remember_me' => 'boolean'
]);

$credentials = request(['email', 'password']);

if (!Auth::attempt($credentials)) {
    return response()->json([
        'message' => 'Unauthorized'
    ], 401);
}

$user = $request->user();

$tokenResult = $user->createToken('Personal Access Token');

$token = $tokenResult->token;

if ($request->remember_me) {
    $token->expires_at = Carbon::now()->addWeeks(1);
}

$token->save();

return response()->json([
    'access_token' => $tokenResult->accessToken,
    'token_type' => 'Bearer',
    'expires_at' => Carbon::parse(
        $tokenResult->token->expires_at
    )->toDateTimeString()
]);

}


4. Traitement de l'authentification

Maintenant, vous avez créé le jeton, utilisateur Tout le code nécessaire pour inscription et connexion de l'utilisateur, ci-dessous nous commencerons à construire le processus d'authentification.

L'application SPA utilise Sanctum pour envoyer des requêtes POST afin de vérifier les informations d'identification de l'utilisateur via les paramètres de courrier électronique et de mot de passe. Si l'authentification réussit, l'application reçoit le jeton OAuth.


Lors de l'utilisation d'une application SPA, ajoutez Autorisation : Bearer d6fb5a6237ab04b68d3c67881a9080fa dans les en-têtes pour accéder à l'API protégée via le routage de l'application.

Après avoir terminé l'authentification, vous pouvez utiliser la route d'authentification via Sanctum pour obtenir les informations de l'utilisateur actuellement authentifié. Par exemple, nous pouvons récupérer le nom de l'utilisateur actuellement authentifié à l'aide du code suivant :

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {

return $request->user()->name;

});

5 Créer des pages et des composants associés

Assurez-vous d'inclure les bibliothèques JavaScript nécessaires dans votre fichier de point d'entrée Laravel ( Vue est utilisé ici .js, Vue Router et Axios). Dans le fichier resources/js/app.js, définissez le composant Vue :

require('./bootstrap');


import Vue from 'vue';#🎜 🎜 #importer l'application depuis './views/App';

importer le routeur depuis './router';

importer le magasin depuis './store';

Vue.component ( 'App', App);

const app = new Vue({

el: '#app',
router,
store

});

Créer des vues et des vues de dossiers de ressources/ App.vue, ajoutez les composants nécessaires (formulaire de connexion, formulaire d'inscription, etc.). Créez tous les composants de page requis dans le dossier des vues.

Pour faciliter la démonstration, la quantité de code est légèrement plus grande. Veuillez consulter la documentation officielle de Laravel.

6. Reconstruisez le routage API et AckController

Mettez à jour le routage API, mappez le routage SPA à AckController et assurez-vous que le middleware utilisera la configuration Sanctum :

Route : middleware('auth:sanctum')->get('/user', function (Request $request) {

return $request->user();

});

Route::post ( '/register', 'APIAuthController@register');

Route::post('/login', 'APIAuthController@login');

Route::middleware('auth: sanctum ')->get('/spa/{any}', function () {

return view('index');

})->where('any', '.*');#🎜🎜 #
Nous ajoutons les méthodes oubliéPassword et réinitialiserPassword dans AckController pour gérer les demandes des utilisateurs qui oublient leur mot de passe et répondent aux liens de réinitialisation de mot de passe :

public function forgotPassword(Request $request)

{# 🎜🎜#
$request->validate(['email' => 'required|email']);

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

if (!$user) {
    return response()->json([
        'message' => 'We could not find your account'
    ], 404);
} else {
    $user->sendPasswordResetNotification($request->email);
}

return response()->json([
    'message' => 'We have e-mailed your password reset link!'
]);

}

public function resetPassword(Request $request)

{

$request->validate([
    'email' => 'required|email',
    'token' => 'required|string',
    'password' => 'required|string|confirmed|min:8'
]);

$resetPasswordStatus = Password::reset($request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) {
    $user->forceFill([
        'password' => Hash::make($password)
    ])->save();
});

if ($resetPasswordStatus === Password::INVALID_TOKEN) {
    return response()->json(['message' => 'The reset token is invalid']);
}

return response()->json(['message' => 'Your password has been updated']);

}

7. Ajouter un routage
Dans Laravel Sanctum, le routage doit être configuré pour activer l'authentification, la protection CSRF et la protection contre les erreurs, et utiliser groban/laravel-livewire pour implémenter le routage pour les applications SPA.

8. Exécutez l'application SPA
Après avoir terminé les étapes ci-dessus, nous pouvons utiliser la commande suivante pour exécuter l'application SPA :

npm run dev#🎜🎜 ##🎜 🎜#Ouvrez l'adresse IP ou l'URL de l'hôte sur l'appareil en cours d'exécution dans un navigateur pour afficher l'application SPA.

Enfin, nous avons utilisé avec succès Laravel Sanctum pour implémenter l'authentification de sécurité pour les applications SPA. Grâce à cette approche, les données des applications peuvent être sécurisées, empêchant tout accès non autorisé et protégeant les informations privées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn