-
php教程之使用Laravel集成JWT认证开发RestfulApi(2)
生成 JWT 密钥
JWT 令牌通过一个加密的密钥来签发。对于 Laravel 5.5 或以上版本,运行下面的命令来生成密钥以便用于签发令牌。
1
|
php artisan jwt:secret |
Laravel 版本低于 5.5 的则运行:
1
|
php artisan jwt:generate |
这篇教程使用 Laravel 5.6。教程中接下来的步骤只在 5.5 和 5.6 中测试过。可能不适用于 Laravel 5.4 或以下版本。您可以阅读 针对旧版本 Laravel 的文档。
注册中间件
JWT 认证扩展包附带了允许我们使用的中间件。在 app/Http/Kernel.php 中注册 auth.jwt 中间件:
1
2
3
4
|
protected $routeMiddleware = [ .... 'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate:: class , ]; |
这个中间件会通过检查请求中附带的令牌来校验用户的认证。如果用户未认证,这个中间件会抛出 UnauthorizedHttpException 异常。
设置路由
开始之前,我们将为所有本教程讨论的点设置路由。打开 routes/api.php 并将下面的路由复制到您的文件中。
1
2
3
4
5
6
7
8
9
10
11
|
Route::post( 'login' , 'ApiController@login' ); Route::post( 'register' , 'ApiController@register' ); Route:: group ([ 'middleware' => 'auth.jwt' ], function () { Route:: get ( 'logout' , 'ApiController@logout' ); Route:: get ( 'user' , 'ApiController@getAuthUser' ); Route:: get ( 'products' , 'ProductController@index' ); Route:: get ( 'products/{id}' , 'ProductController@show' ); Route::post( 'products' , 'ProductController@store' ); Route::put( 'products/{id}' , 'ProductController@update' ); Route::delete( 'products/{id}' , 'ProductController@destroy' ); }); |