zoukankan      html  css  js  c++  java
  • Laravellumen 配置JWT

    具体步骤参照: [ 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
     如果以上步骤都正确, 就可以写个登陆方法进行测试了.

  • 相关阅读:
    js合并table指定列
    jquery固定表头和列头
    Response输出excel设置文本样式
    Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句
    清除webBrowser 缓存和Cookie的解决方案
    WebBrowser加载一个URL被多次调用DocumentCompleted 的问题解决方案<转>
    Windows 2003 防火墙开启后无法访问FTP解决办法
    基于支付宝微信通知的一种个人收款回调方案(转)
    P2P技术详解(三):P2P技术之STUN、TURN、ICE详解
    turn协议的工作原理
  • 原文地址:https://www.cnblogs.com/linjunjie/p/6232485.html
Copyright © 2011-2022 走看看