(jwt+dingo)和(passport+dingo)使用

Laravel实现dingo+JWT api接口之配置篇
Laravel实现dingo+JWT api接口之实战篇

  1. 安装dingo

  2. 你需要修改你的 composer.json 文件,然后执行 composer update 把最后一个版本的包加入你的项目
"require": {
    "dingo/api": "1.0.*@dev"
}

或者直接

composer require dingo/api:1.0.x@dev
  • 打开 config/app.php,注册必要的 service provider 在你的应用 providers 之前。
'providers' => [
    Dingo\Api\Provider\LaravelServiceProvider::class
]
  • 生成dingo配置文件 config/api.php :
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
  • .env添加基础配置(四个即可):
#标准树
API_STANDARDS_TREE=vnd
#前缀
API_PREFIX=api
#版本
API_VERSION=v1
#开启调试
API_DEBUG=true
phpAPI_STANDARDS_TREE=vnd
API_SUBTYPE=biubiujun
API_PREFIX=api
API_VERSION=v1
API_NAME=BiuBiuJun
API_CONDITIONAL_REQUEST=false
API_STRICT=false
API_DEFAULT_FORMAT=json
API_DEBUG=true
API_STANDARDS_TREE - API规格 
  1 本地或私有环境 
  2 prs 非商业销售的项目 
  3 vnd 公开的以及商业销售的项目
API_SUBTYPE - API简称 
API_PREFIX - API前缀(或使用API_DOMAIN - API子域名) 
API_VERSION - API默认版本 
API_NAME - API名称 
API_CONDITIONAL_REQUEST - 带条件的请求,由于缓存API请求的时候会使用客户端缓存功能,所以默认开启了带条件的请求 
API_STRICT - 严格模式,要求客户端发送Accept头而不是默认在配置文件中指定的版本 
API_DEFAULT_FORMAT - 响应格式,默认的响应格式是JSON 
API_DEBUG - 调试模式
  • 安装jwt

  1. 你需要修改你的 composer.json 文件,然后执行 composer update 把最后一个版本的包加入你的项目
"require": {
    "tymon/jwt-auth": "0.5.*"
}

或者直接

composer require tymon/jwt-auth
  • 打开 config/app.php,注册到 providers 数组。
'providers'=>[
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,
]
  • 注册jwt门面:
'aliases'=>[
'JWTAuth'=> Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory'=> Tymon\JWTAuth\Facades\JWTFactory::class,
]
  • 生成jwt配置文件 config/jwt.php :
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
  • 生成 jwt.php 文件中数组的 secret 键成对应的值:
php artisan jwt:generate
  • 关联dingo与JWT

修改 config/api.phpauth 如下:

'auth' => [  
    'basic' => function($app){  
        return new Dingo\Api\Auth\Provider\Basic($app['auth']);  
    },  
    'jwt' => function($app){  
        return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);  
    }  
],  
  • 安装passport

    1. 使用 Composer 依赖包管理器安装 Passport :
composer require laravel/passport
  • 接下来,将 Passport 的服务提供者注册到配置文件 config/app.phpproviders 数组中:
    Laravel\Passport\PassportServiceProvider::class,
    Passport 使用服务提供者注册内部的数据库迁移脚本目录,所以上一步完成后,你需要更新你的数据库结构。Passport 的迁移脚本会自动创建应用程序需要的客户端数据表和令牌数据表:
  • php artisan migrate
    添加了如下几张表:
Migrating: 2016_06_01_000001_create_oauth_auth_codes_table
Migrating: 2016_06_01_000002_create_oauth_access_tokens_table
Migrating: 2016_06_01_000003_create_oauth_refresh_tokens_table
Migrating: 2016_06_01_000004_create_oauth_clients_table
Migrating: 2016_06_01_000005_create_oauth_personal_access_clients_table

如果你不打算使用 Passport 的默认迁移,你应该在 AppServiceProviderregister 方法中调用 Passport :: ignoreMigrations 方法。 你可以导出这个默认迁移用 php artisan vendor:publish --tag=passport-migrations 命令。

  1. 接下来,你需要运行 passport:install 命令来创建生成安全访问令牌时用到的加密密钥,同时,这条命令也会创建「私人访问」客户端「密码授权」客户端:【运行 passport:install 命令,该命令将会创建生成安全访问令牌(token)所需的加密键,此外,该命令还会创建 personal accesspassword grant 客户端用于生成访问令牌,该命令会在 storage 目录中生成认证需要的加密键, oauth-private.keyoauth-public.key
    php artisan passport:install
    执行上述代码后的结果:
Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client Secret: e7pPOyPMFiEuE5EvtDvY9qsesfTgqNhb61r37cez
Password grant client created successfully.
Client ID: 2
Client Secret: eI4XKieiDQRUCMpnfb3g5MOr8SItQ5rCZBv3bWO3
  • 上面命令执行后,请将 Laravel\Passport\HasApiTokens Trait 添加到 App\User 模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用域:
  • 接下来,需要在 AuthServiceProviderboot 方法中调用 Passport::routes 函数。这个函数会注册一些在访问令牌、客户端、私人访问令牌的发放和吊销过程中会用到的必要路由:
 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();

        Passport::tokensExpireIn(Carbon::now()->addDays(15));

        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));

        Passport::pruneRevokedTokens();
    }
}

最后,需要将配置文件 config/auth.phpapi 部分的授权保护项( driver )改为 passport 。此调整会让你的应用程序在接收到 API 的授权请求时使用 Passport 的 TokenGuard 来处理:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',//【可能这里需要修改】
    ],
],
  • 如果用手机号进行授权的话,需要修改模型
    /**
     * [findForPassport passport通过手机号/账号验证]
     * @param  [type] $username [description]
     * @return [type]           [description]
     */
    public function findForPassport($username)
    {
        // if (!$this->where('phone', $username)->first()) {
        //     return $this->where('name', $username)->first();
        // }
        // return true;

        return $this->where('phone', $username)->first();

        // return $this->where('phone', $username)->first() || $this->where('name', $username)->first();
    }
  • 额外说明

  • 通过事件监听来清理token的方法 + 解决注销之后再登录的密码验证问题

  • dingo+passport结合

    1. 创建一个密码发放客户端
php artisan passport:client --password

配置Dingo使用Passport密码发放令牌

  • 创建 PassportDingoProvider
php artisan make:provider PassportDingoProvider
  • 修改 app/Providers/PassportDingoProvider.php
user();
    }
    public function getAuthorizationMethod()
    {
        return 'bearer';
    }
}
  • 修改 config/api.php
'auth' => [ 
    'custom' => \App\Providers\PassportDingoProvider::class
],
  • 修改 App/Http/Kernel.php
protected $middlewareGroups = [
   ...
   'api:auth' => [
       'auth:api',
       'api.auth'
    ]
    ...
];
  • routes/api.php 修改之前注册路由
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['middleware' => 'api:auth', 'namespace' => 'App\Http\Controllers\Api\V1'], function ($api) {
    $api->get('user/{id}', 'UserController@show');
    $api->get('user', 'UserController@index');
});
  • 测试-请求令牌
    curl -d "[email protected]@password=123456@grant_type=password&client_id=&client_secret=" http://localhost/path/public/api/oauth/token
  • 测试-请求用户列表
curl -H "Authorization: Bearer " http://localhost/path/public/api/user
  • Swagger

    1. 安装
composer require zircote/swagger-php
  • 创建 SwaggerController
php artisan make:controller SwaggerController
  • 修改 app/Http/Controller/SwaggerController
json($swagger);
    }
}
  • 下载 swagger-ui
    swagger-ui
    • 将swagger-ui/dist目录放入public/doc
    • 修改public/doc/index.html



                    
                    

你可能感兴趣的:((jwt+dingo)和(passport+dingo)使用)