`提示:windows 下部署 测试环境
composer --version
composer install
composer update --no-scripts
composer global require "lumen-installer"
##或者
composer create-project --prefer-dist laravel/lumen vnapi
// 1、安装JWT
composer require tymon/jwt-auth
//配置
一、把 vendor/tymon/jwt-auth/config/config.php 文件拷贝到根目录下 Config 文件夹中并把它重命名为 jwt.php (获取 jwt 配置文件);
二、在 bootstrap/app.php 文件中注册 JWT 的配置文件、开启 auth 路由中间件和 开启AuthServiceProvider服务、注册 JWT 服务提供者如下:
// jwt 配置文件
$app->configure('jwt');
//开启 auth 路由中间件
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]);
//需要添加的注册服务
$app->register(App\Providers\AuthServiceProvider::class);
$app->register(App\Providers\AppServiceProvider::class);
// jwt服务提供者
$app>register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);
三、生成 JWT_SECRET 写入.env(自动写入)
php artisan jwt:secret
//会生成如下的套餐
JWT_SECRET=
JWT_TTL=10080
composer require dingo/api
2、配置Dingo
a、把 Dingo 的配置文件夹 (vendor/dingo/api/config)拷贝到根目录;
b、在 .env 中写入 Dingo 配置 ( 具体配置见: [https://learnku.com/docs/dingo-api/2.0.0/Configuration/1444](https://learnku.com/docs/dingo-api/2.0.0/Configuration/1444) )
#以下是我的配置:
API_STANDARDS_TREE=vnd
API_SUBTYPE=lumen
API_PREFIX=api
#子域名 (前缀和子域名只能存在一个)可选
#API_DOMAIN=api.myapp.com
API_VERSION=v1
API_NAME=api-demo
#API_CONDITIONAL_REQUEST=false
#API_STRICT=false
API_DEFAULT_FORMAT=json
API_DEBUG=true
c、 在 bootstrap/app.php 文件中开启门面和Eloquent模型, 注册 Dingo 的配置文件和 Dingo 服务提供者并开启应用服务提供者,如下:
$app->withFacades(); //使用门面
$app->withEloquent(); //使用Eloquent模型
$app->configure('api'); //注册dingo配置文件(也就是 config/api.php)
//注册服务
$app->register(App\Providers\AppServiceProvider::class);
// $app->register(App\Providers\AuthServiceProvider::class);
// $app->register(App\Providers\EventServiceProvider::class);
// dingo服务提供者
$app->register(Dingo\Api\Provider\LumenServiceProvider::class);
在 api.php 的 auth 数组中添加 api 权限验证类
'auth' => [
'jwt' => Dingo\Api\Auth\Provider\JWT::class, // api 权限验证类
],
把 jwt.php providers 数组中的 token 生成类(Lcobucci)修改为 Namshi 如下:
'providers' => [
//'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class, // 使用 attempt() 方法生成 token (不推荐使用这方法)
'jwt' => Tymon\JWTAuth\Providers\JWT\Namshi::class, //使用 formUser() 方法生成 token
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
]
],
APP_NAME=Lumen
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
#设置php时区(中国时区:PRC;默认: UTC)
APP_TIMEZONE=PRC
LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=severname
DB_USERNAME=root
DB_PASSWORD=root
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
API_STANDARDS_TREE=vnd
API_SUBTYPE=lumen
API_PREFIX=api
#子域名 (前缀和子域名只能存在一个)可选
#API_DOMAIN=api.myapp.com
API_VERSION=v1
API_NAME=api-demo
#API_CONDITIONAL_REQUEST=false
#API_STRICT=false
API_DEFAULT_FORMAT=json
API_DEBUG=true
<?php
$api = app('Dingo\Api\Routing\Router');
// v1 version API
// add in header Accept:application/vnd.lumen.v1+json
$api->version('v1', [
'namespace' => 'App\Http\Controllers\Api\V1',
'middleware' => [
'cors'
],
// each route have a limit of 20 of 1 minutes
'limit' => 1000, 'expires' => 1,
], function ($api) {
// Auth
$api->group(["prefix" => 'auth'], function ($api) {
$api->post('/login', 'AuthController@login');
$api->post('/register', 'AuthController@register');
// need authentication
$api->group(['middleware' => 'api.auth'], function ($api) {
$api->post('/refresh', 'AuthController@update');
$api->post('/logout', 'AuthController@destroy');
});
});
});
$app->router->group([
'namespace' => 'App\Http\Controllers',
], function ($router) {
require __DIR__.'/../routes/web.php';
require __DIR__.'/../routes/api/v1.php'; //管理路由文件
});
a、 安装 palanik/lumen-cors (具体用法见: [https://github.com/palanik/lumen-cors](https://github.com/palanik/lumen-cors) )
composer require palanik/lumen-cors:dev-master
b、 在 bootstrap/app.php 中添加 cors 路由中间件( 在路由组中使用该中间件 )
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
'cors' => palanik\lumen\Middleware\LumenCors::class,
]);
#总结
还存在问题:
1、php时区的问题
2、接口加密