第 1 步:使用 Composer 安装 Laravel 11
首先,选择要安装 Laravel 的文件夹,然后在终端或 CMD 上执行以下命令以安装 Laravel 11:
composer create-project laravel``/laravel laravel-11-passport
通过 Laravel 安装程序安装:
laravel new laravel-11-passport
步骤 2:设置数据库配置
打开 .env 文件并设置数据库配置:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your database name(laravel_11_passport)
DB_USERNAME=your database username(root)
DB_PASSWORD=your database password(root)
步骤 3:启用 API 并更新身份验证异常
php artisan ``install``:api
启用 API 后,我们现在将更新 API 中间件的身份验证异常,以便它不会重定向到 login,而是会引发异常: bootstrap/app.php 引导/app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (AuthenticationException $e, Request $request) {
if ($request->is('api/*')) {
return response()->json([
'message' => $e->getMessage(),
], 401);
}
});
})->create();
第 4 步:安装 Laravel Passport
执行以下命令以安装 Passport:
composer require laravel``/passport
步骤 5:创建加密密钥和迁移
Laravel passport 有其数据库迁移目录。passport 迁移将创建表来存储客户端和访问令牌。让我们创建用于生成安全访问令牌的加密密钥并运行迁移。运行以下命令:
php artisan passport:``install
该命令将创建个人访问和密码授予,用于生成访问令牌。
步骤 6:更新用户模型
将 Laravel\Passport\HasApiTokens 特征添加到 App\Modles\User 模型。该特征为模型提供了帮助程序方法,用于检查经过身份验证的用户的令牌和范围。
app\Models\User.php 应用\模型\User.php
`<?php`
`namespace` `App\Models;`
`// use Illuminate\Contracts\Auth\MustVerifyEmail;`
`use` `Illuminate\Database\Eloquent\Factories\HasFactory;`
`use` ` Illuminate\Foundation\Auth\User ``as` `Authenticatable;`
`use` `Illuminate\Notifications\Notifiable;`
`use` `Laravel\Passport\HasApiTokens;`
`class` ` User ``extends` `Authenticatable`
`{`
` ``use` `HasApiTokens, HasFactory, Notifiable;`
` ``/**`
` ``* The attributes that are mass assignable.`
` ``*`
` ``* @var array<int, string>`
` ``*/`
` ``protected` `$fillable` `= [`
` ``'name'``,`
` ``'email'``,`
` ``'password'``,`
` ``];`
` ``/**`
` ``* The attributes that should be hidden for serialization.`
` ``*`
` ``* @var array<int, string>`
` ``*/`
` ``protected` `$hidden` `= [`
` ``'password'``,`
` ``'remember_token'``,`
` ``];`
` ``/**`
` ``* Get the attributes that should be cast.`
` ``*`
` ``* @return array<string, string>`
` ``*/`
` ``protected` `function` ` casts(): ``array`
` ``{`
` ``return` `[`
` ``'email_verified_at'` ` => ``'datetime'``,`
` ``'password'` ` => ``'hashed'``,`
` ``];`
` ``}`
`}`
第 7 步:更新 AppServiceProvider.php
我们不会使用 passport 默认路由,我们将创建自定义身份验证,因此我们将删除默认路由。您可以通过执行以下命令来检查路由:php artisan route:list。 app/Providers/AppServiceProvider.php
`<?php`
`namespace` `App\Providers;`
`use` `Illuminate\Support\ServiceProvider;`
`use` `Laravel\Passport\Passport;`
`class` ` AppServiceProvider ``extends` `ServiceProvider`
`{`
` ``/**`
` ``* Register any application services.`
` ``*/`
` ``public` `function` `register(): void`
` ``{`
` ``Passport::ignoreRoutes();`
` ``}`
` ``/**`
` ``* Bootstrap any application services.`
` ``*/`
` ``public` `function` `boot(): void`
` ``{`
` ``//`
` ``}`
`}`
第 8 步:设置 API 驱动程序选项
传入的 API 请求将由 Passport 的 TokenGuard 进行身份验证。 config/auth.php 配置/auth.php
1234567891011 | `'guards'` `=> [`` ``'web'` `=> [`` ``'driver'` ` => ``'session'``,`` ``'provider'` ` => ``'users'``,`` ``],` ` ``'api'` `=> [`` ``'driver'` ` => ``'passport'``,`` ``'provider'` ` => ``'users'``,`` ``],`` ``],`
步骤 9:创建身份验证控制器
现在,让我们创建一个控制器,该控制器将负责注册和验证用户。运行以下命令:
php artisan ``make``:controller Api``/AuthenticationController |
然后打开 AuthenticationController 文件,并添加以下代码:
app/Http/Controllers/Api/AuthenticationController.php
`<?php`
`namespace` `App\Http\Controllers\Api;`
`use` `App\Http\Controllers\Controller;`
`use` `Illuminate\Http\Request;`
`use` `Illuminate\Support\Facades\Auth;`
`use` `App\Models\User;`
` `
` `
`class` ` AuthenticationController ``extends` `Controller`
`{`
` ``public` `function` ` register(Request ``$request``)`
` ``{`
` ``$formData` `= [`
` ``'name'` ` => ``$request``->name,`
` ``'email'` ` => ``$request``->email,`
` ``'password'` ` => ``$request``->password,`
` ``];`
` `
` ``$formData``[``'password'``] = bcrypt(``$request``->password);`
` `
` ``$user` `= User::create(``$formData``); `
` `
` ``return` `response()->json([`
` ``'user'` ` => ``$user``,`
` ``'token'` ` => ``$user``->createToken(``'passportToken'``)->accessToken`
` ``], 200);`
` `
` ``}`
` `
` ``public` `function` ` login(Request ``$request``)`
` ``{`
` ``$credentials` `= [`
` ``'email'` ` => ``$request``->email,`
` ``'password'` ` => ``$request``->password`
` ``];`
` `
` ``if` `(Auth::attempt(``$credentials``))`
` ``{`
` ``$token` `= Auth::user()->createToken(``'passportToken'``)->accessToken;`
` `
` ``return` `response()->json([`
` ``'user'` `=> Auth::user(),`
` ``'token'` ` => ``$token`
` ``], 200);`
` ``}`
` `
` ``return` `response()->json([`
` ``'error'` ` => ``'Unauthorised'`
` ``], 401);`
` `
` ``}`
`}`
步骤 10:创建 API 路由
最后,让我们为用户创建一个用于注册和登录的路由。 routes/api.php 路线/api.php
`<?php`
`use Illuminate\Http\Request;`
`use Illuminate\Support\Facades\Route;`
`use App\Http\Controllers\Api\AuthenticationController;`
`Route::get('/user', function (Request $request) {`
` ``return $request->user();`
`})->middleware('auth:api');`
`Route::post('register', [AuthenticationController::class, 'register'])->name('register');`
`Route::post('login', [AuthenticationController::class, 'login'])->name('login');`
我们将使用 Postman 进行测试,但您可以按照自己喜欢的方式进行测试。 Register 注册
Login 登录
访问令牌将在访问需要身份验证的 API 路由时使用。尝试访问 /api/user 路由。
现在我们的 API 身份验证已完成。