L'éditeur de PHP vous fera découvrir l'utilisation de Laravel Passport pour gérer l'authentification API. Laravel Passport est une implémentation complète du serveur OAuth2 qui peut aider les développeurs à mettre en œuvre facilement l'authentification API et fournit de nombreuses fonctions pratiques. A travers cet article, vous apprendrez à utiliser Laravel Passport pour gérer l'authentification des utilisateurs API et assurer la sécurité de l'interface API.
Nous devons utiliser la commande suivante pour créer une dernière application Laravel, veuillez donc ouvrir le terminal et exécuter :
laravel new auth
Laravel Passport peut être utilisé dans un quelques minutes Votre application implémente un serveur OAuth2 complet.
composer require laravel/passport
La migration de passeport créera les tables utilisées par votre application pour stocker les clients et les jetons d'accès.
PHP artisan migrate
Cette commande créera une clé secrète pour générer un jeton d'accès sécurisé. De plus, il créera également un accès personnel et un passGrantWord utilisé pour générer le jeton d'accès :
php artisan passport:install
Après l'exécution, ajoutez LaravelPassportHasApiTokens
trLaravelPassportHasApiTokens
trait 添加到你的 AppUser
模型中。这个 trait 会为模型添加一系列助手函数用来验证用户的秘钥和作用域:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use Notifiable, HasApiTokens; }
接下来,你应该在 AuthServiceProvider
中的 boot
方法中调用 Passport::routes
方法。这个方法会注册必要的路由去颁发访问令牌,撤销访问令牌,客户端和个人令牌:
<?php namespace App\Providers; use Laravel\Passport\Passport; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; public function boot() { $this->reGISterPolicies(); Passport::routes(); } }
最后,在 config/auth.php
配置文件中,你应该设置 api
权限认证守卫的 driver
选项为 passport
。当需要权限认证的 API 请求进来时会告诉你的应用去使用 Passport's 的 TokenGuard
。
'guards' => [ 'WEB' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Laravel 提供了 routes/api.php
文件来给我们编写 web 路由,因此在这个文件添加新的路由即可。
<?php use Illuminate\Http\Request; Route::group([ 'prefix' => 'auth' ], function () { Route::post('login', 'AuthController@login'); Route::post('signup', 'AuthController@signup'); Route::group([ 'middleware' => 'auth:api' ], function() { Route::get('loGout', 'AuthController@logout'); Route::get('user', 'AuthController@user'); }); });
最后一步我们必须创建新的控制器和 api 方法。因此我们先创建 AuthController
ai
Modèle AppUser
. Ce trait ajoutera une série de fonctions d'assistance au modèle pour vérifier la clé secrète et la portée de l'utilisateur : Ensuite, vous devezÉtape 5. Configuration du passeport
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Carbon\Carbon; use App\User; class AuthController extends Controller { public function signup(Request $request) { $request->validate([ 'name' => 'required|string', 'email' => 'required|string|email|unique:users', 'password' => 'required|string|confirmed' ]); $user = new User([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password) ]); $user->save(); return response()->JSON([ 'message' => 'Successfully created user!' ], 201); } public function login(Request $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() ]); } public function logout(Request $request) { $request->user()->token()->revoke(); return response()->json([ 'message' => 'Successfully logged out' ]); } public function user(Request $request) { return response()->json($request->user()); } }Copier après la connexion
dans <code>AuthServiceProvider
Le Passport::routes
est appelée dans la méthode >boot. Cette méthode enregistrera les routes nécessaires pour émettre des jetons d'accès, révoquer les jetons d'accès, les jetons client et personnels : php artisan serve
config/auth.php
, vous devez définir le L'option du pilote
du garde d'authentification des autorisations api
est passport
. Lorsqu'une requête API nécessitant une authentification par autorisation arrive, votre application sera invitée à utiliser le TokenGuard
de Passport. Content-Type: application/json X-Requested-With: XMLHttpRequest
Laravel fournit le fichier routes/api.php
pour que nous puissions écrire des routes Web, il suffit donc d'ajouter une nouvelle route dans ce fichier. rrreeeÉtape 7 : Créer un contrôleur
Dans la dernière étape, nous devons créer de nouvelles méthodes de contrôleur et d'API. Nous créons donc d'abordMaintenant, nous sommes prêts à exécuter notre exemple, exécutez la commande suivante pour l'exécuter rapidement :AuthController
et y mettons le code :rrreee
rrreee
TestDésormais, nous pouvons utiliser le client REST
tools
pour simplifier les tests, comme Postman. J'ai exécuté le test et vous pouvez voir la capture d'écran ci-dessous. Vous devez définir les deux informations d'en-tête suivantes pour cette API : rrreeeRegister
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!