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  若是以上步骤都正确, 就能够写个登录方法进行测试了.