Laravel-lumen 配置JWT

具体步骤参照: [ JWT & Lumen ]


第一步

在项目根目录 执行命令

composer require tymon/jwt-auth
 
 
  • 1
  • 1

第二步

在 bootstrap/app.PHP 的 Register Service Providers 部分添加注册

$app->register('Tymon\JWTAuth\Providers\JWTAuthServiceProvider');
//建议 改成这样 
$app->register(Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class);
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

第三步

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);
        }
    }
?>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.2 在根目录 composer.json 文件内 “autoload” 部分 添加自动加载 helper.php

"files": [
       "src/helpers.php"
   ]
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3.3 运行

composer dump-autoload
 
 
  • 1
  • 1

第四步

注意: 如果不执行第四步,直接执行第五步,会报错: 
“There are no commands defined in the “vendor” namespace. ” 
所以要先引入 原文作者 写好的一个包 : 
[vendorPublishCommand]https://github.com/laravelista/lumen-vendor-publish

也可以直接访问上面的地址,把代码挡下来, 放到 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'
];
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

第五步

运行

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
 
 
  • 1
  • 1

第六步

去 bootstrap/app.php 内, 找到 $app->withFacades(); 并去掉注释,在下面写上

$app->configure('jwt');
class_alias('Tymon\JWTAuth\Facades\JWTAuth', 'JWTAuth');
class_alias('Tymon\JWTAuth\Facades\JWTFactory', 'JWTFactory');
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

第七步

项目根目录执行 生成JWT 秘钥 
项目根目录运行

php artisan jwt:generate
 
 
  • 1
  • 1

执行完了之后,会在 config/jwt.php 文件里自动配置好 秘钥

'secret' => env('JWT_SECRET', '4N49NxgrULTbBdG0OTZ6K60bxr1RIl'),
 
 
  • 1
  • 1

这个秘钥也可以移动到 .env文件里,如下

    # JWT
    JWT_SECRET=4N49NxgrULTbBdG0OTZ6K60bxr1RIl
 
 
  • 1
  • 2
  • 1
  • 2

注意: 如果使用 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,
]);
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

然后你就可以去 你的路由里面 这样写了,表示在请求这个路由的时候,会首先进行JWT验证

$app->group(['prefix' => 'projects', 'middleware' => 'jwt.auth'], function($app) {
    $api->get('auth/show', [
           'as'   => 'auth.show',
           'uses' => 'AuthController@show'
       ]);
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果你用的是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'
        ]);
    });
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

第九步

把 /vendor/laravel/lumen-framework/config/auth.php 复制 到 根目录下的 config 目录下, 
并且 修改

'model' => env('AUTH_MODEL', 'App\User'), 
 
 
  • 1
  • 1

'model' => env('AUTH_MODEL', 'App\Models\User'),
 
 
  • 1
  • 1

如果出现 App\User not found 说明没有定义 User 的 modelJWT 最终还是去调用的 Laravel的 auth ,他会去实例化 UserModel 
如果以上步骤都正确, 就可以写个登陆方法进行测试了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值