-
php教程之使用Laravel集成JWT认证开发RestfulApi
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
在使用跨平台应用程序时, API 是一个非常不错的选择。 除了网站,您的产品可能还有 Android 和 iOS 应用程序。 在这种情况下, API 也是同样出色的,因为您可以在不更改任何后端代码的情况下编写不同的前端。 使用 API 时,只需使用一些参数点击 GET , POST 或其他类型的请求,服务器就会返回 JSON (JavaScript Object Notation) 格式的一些数据,这些数据由客户端应用程序处理。
说明
我们先写下我们的应用程序详细信息和功能。 我们将使用 JWT 身份验证在 laravel 中使用 restful API 构建基本用户产品列表。
A User 将会使用以下功能
- 注册并创建一个新帐户
- 登录到他们的帐户
- 注销和丢弃 token 并离开应用程序
- 获取登录用户的详细信息
- 检索可供用户使用的产品列表
- 按 ID 查找特定产品
- 将新产品添加到用户产品列表中
- 编辑现有产品详细信息
- 从用户列表中删除现有产品
A User 必填
- name
- password
A Product 必填
- name
- price
- quantity
创建新的项目
通过运行下面的命令,我们就可以开始并创建新的 Laravel 项目。
composer create-project --prefer-dist laravel/laravel jwt
这会在名为 jwt 的目录下创建一个新的 Laravel 项目。
配置 JWT 扩展包
我们会使用 tymondesigns/jwt-auth 扩展包来让我们在 Laravel 中使用 JWT。
安装 tymon/jwt-auth 扩展包
让我们在这个 Laravel 应用中安装这个扩展包。如果您正在使用 Laravel 5.5 或以上版本,请运行以下命令来获取 dev-develop 版本的 JWT 包:
1
|
composer require tymon/jwt-auth:dev-develop --prefer-source |
如果您正在使用 Laravel 5.4 或以下版本,那么要运行下面这条命令:
1
|
composer require tymon/jwt-auth |
对于 Laravel 版本 低于 5.5 的应用,您还要在 config/app.php 文件中设置服务提供者和别名。
1
2
3
4
5
6
7
8
9
10
11
|
'providers' => [ .... Tymon\JWTAuth\Providers\JWTAuthServiceProvider:: class , .... ], 'aliases' => [ .... 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth:: class , 'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory' , .... ], |
如果您的 Laravel 版本为 5.5 或以上,Laravel 会进行「包自动发现」。
发布配置文件
对于 5.5 或以上版本 的 Laravel,请使用下面这条命令来发布配置文件:
1
|
php artisan vendor:publish --provider= "Tymon\JWTAuth\Providers\LaravelServiceProvider" |
对于之前 之前版本的 Laravel,那么应该运行下面这条命令:
1
|
php artisan vendor:publish --provider= "Tymon\JWTAuth\Providers\JWTAuthServiceProvider" |
上面的命令会生成 config/jwt.php 配置文件。除去注释部分,配置文件会像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php return [ 'secret' => env( 'JWT_SECRET' ), 'keys' => [ 'public' => env( 'JWT_PUBLIC_KEY' ), 'private' => env( 'JWT_PRIVATE_KEY' ), 'passphrase' => env( 'JWT_PASSPHRASE' ), ], 'ttl' => env( 'JWT_TTL' , 60), 'refresh_ttl' => env( 'JWT_REFRESH_TTL' , 20160), 'algo' => env( 'JWT_ALGO' , 'HS256' ), 'required_claims' => [ 'iss' , 'iat' , 'exp' , 'nbf' , 'sub' , 'jti' , ], 'persistent_claims' => [ // 'foo', // 'bar', ], 'lock_subject' => true , 'leeway' => env( 'JWT_LEEWAY' , 0), 'blacklist_enabled' => env( 'JWT_BLACKLIST_ENABLED' , true ), 'blacklist_grace_period' => env( 'JWT_BLACKLIST_GRACE_PERIOD' , 0), 'decrypt_cookies' => false , 'providers' => [ 'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci:: class , 'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate:: class , 'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate:: class , ], ]; |