Laravel-lumen 配置JWT

具體步驟參照: [ JWT & Lumen ]php

第一步laravel

在項目根目錄 執行命令json

composer require tymon/jwt-auth
第二步bootstrap

在 bootstrap/app.php 的 Register Service Providers 部分添加註冊api

$app->register('Tymon\JWTAuth\Providers\JWTAuthServiceProvider');
//建議 改爲這樣
$app->register(Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class);
第三步app

3.1 在 app 目錄下建立 helper.php 文件 並寫入如下代碼composer

<?phpide

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.phppost

"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  若是以上步驟都正確, 就能夠寫個登錄方法進行測試了.

相關文章
相關標籤/搜索