具體步驟參照: [ JWT & Lumen ]
第一步
在項目根目錄 執行命令
composer require tymon/jwt-auth
第二步
在 bootstrap/app.php 的 Register Service Providers 部分添加注冊
$app->register('Tymon\JWTAuth\Providers\JWTAuthServiceProvider');
//建議 改成這樣
$app->register(Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class);
第三步
3.1 在 app 目錄下創建 helper.php 文件 並寫入以下代碼
<?php
if ( ! function_exists('config_path'))
{
/**
* Get the configuration path.
*
* @param string $path
* @return string
*/
function config_path($path = '')
{
return app()->basePath() . '/config' . ($path ? '/' . $path : $path);
}
}
?>
3.2 在根目錄 composer.json 文件內 “autoload” 部分 添加自動加載 helper.php
"files": [
"src/helpers.php"
]
3.3 運行
composer dump-autoload
第四步
注意: 如果不執行第四步,直接執行第五步,會報錯:
“There are no commands defined in the “vendor” namespace. ”
所以要先引入 原文作者 寫好的一個包 :
[vendorPublishCommand]
包文件內容:
執行
composer require laravelista/lumen-vendor-publish
在app/Console/Kernel.php中添加:
protected $commands = [ \Laravelista\LumenVendorPublish\VendorPublishCommand::class ];
也可以直接訪問上面的地址,把代碼擋下來, 放到 vendor/basicit/lumen-vendor-publish 目錄下,
basicit/lumen-vendor-publish 目錄需要自己手動創建
這樣就不用執行 下面的命令了, 由於國內被牆, 執行命令會很慢!
4.1 運行 composer require basicit/lumen-vendor-publish 命令(時間很長)
4.2 在 app/Console/Kernel.php 文件內 添加
protected $commands = [
'BasicIT\LumenVendorPublish\VendorPublishCommand'
];
第五步
運行
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
第六步
去 bootstrap/app.php 內, 找到 $app->withFacades(); 並去掉注釋,在下面寫上
$app->configure('jwt');
class_alias('Tymon\JWTAuth\Facades\JWTAuth', 'JWTAuth');
class_alias('Tymon\JWTAuth\Facades\JWTFactory', 'JWTFactory');
第七步
項目根目錄執行 生成JWT密鑰
項目根目錄運行
php artisan jwt:generate
執行完了之后,會在 config/jwt.php 文件里自動配置好 秘鑰
'secret' => env('JWT_SECRET', '4N49NxgrULTbBdG0OTZ6K60bxr1RIl'),
這個秘鑰也可以移動到 .env文件里,如下
# JWT
JWT_SECRET=4N49NxgrULTbBdG0OTZ6K60bxr1RIl
注意: 如果使用 postman 測試 接口,在使用 PUT 等協議方法的情況下, 使用 x-www-form-urlencoded 發送數據, 不要使用默認的 form-data格式的數據
第八步
在某些情況下,可能某些接口,需要token 驗證,某些則不需要 就需要去 bootstrap/app.php 里面
找到 “Register Middleware” 部分,去掉 “routeMiddleware” 注釋
並添加代碼后是這樣:
$app->routeMiddleware([
'jwt.auth' => Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => Tymon\JWTAuth\Middleware\RefreshToken::class,
]);
然后你就可以去 你的路由里面 這樣寫了,表示在請求這個路由的時候,會首先進行JWT驗證
$app->group(['prefix' => 'projects', 'middleware' => 'jwt.auth'], function($app) {
$api->get('auth/show', [
'as' => 'auth.show',
'uses' => 'AuthController@show'
]);
});
如果你用的是Dingo API 的話,就這樣寫
$api->version('v1', ['namespace' => 'App\Http\Controllers\Api\V1'], function ($api) {
// 需要jwt驗證后才能使用的API 也就是登陸之后,才能訪問的路由,比如用戶詳細
$api->group(['middleware' => 'jwt.auth'], function ($api) {
#Auth
$api->get('auth/show', [
'as' => 'auth.show',
'uses' => 'AuthController@show'
]);
});
});
第九步
把 /vendor/laravel/lumen-framework/config/auth.php 復制 到 根目錄下的 config 目錄下,
並且 修改
'model' => env('AUTH_MODEL', 'App\User'),
為
'model' => env('AUTH_MODEL', 'App\Models\User'),
如果出現 App\User not found 說明沒有定義 User 的 model, JWT 最終還是去調用的 Laravel的 auth,他會去實例化 UserModel
如果以上步驟都正確, 就可以寫個登陸方法進行測試了.
