【微信小程序】安装DingoApi开发小程序api

1.安装

composer require dingo/api

2.发布配置:

php artisan vendor:publish

选择DingoApi发布.

3.向.env文件添加配置

(1)项目环境

API_STANDARDS_TREE =  prs

x:本地开发私有环境

prs:未对外公布,单页应用

vnd:开放所有用户

(2)项目简称

API_SUBTYPE=test

(3)前缀

API_PREFIX=api

(4)api版本

API_VERSION=v1

(5)测试环境,显示错误信息

API_DEBUG=true

3.接管路由

$api = app('DingoApiRoutingRouter');
/*
 * 1.确定namespace.
 * 2.启动数组序列化器
 * 3.开启模型绑定
 */
$api->version('v1',[
    'namespace' => 'AppHttpControllersApi',
    'middleware' => ['serializer:array','bindings']
],function ($api){
    /*
     * 游客可以访问的接口
   * 1.限制接口访问次数
   * 
     */
    $api->group([
        'middleware' => 'api.throttle',
        'limit' => config('api.rate_limits.access.limit'),
        'expires' => config('api.rate_limits.access.expires'),
    ],function($api){
        //这里写不需要验证的接口
      $api->(……)->name(……);
。
。
。
        /*
         * 需要验证的接口
      * 1.授权才能访问
         */
        $api->group([
            'middleware' => 'api.auth',
        ],function ($api){
            //这里写需要验证的接口
        $api->(……)->name(……);
。
。
。

        });
    });
});

4.安装序列化器选择器

composer require liyu/dingo-serializer-switch

5.创建数据转换器

<?php

namespace AppTransformers;

use AppModelsModel;
use LeagueFractalTransformerAbstract;

class ModelTransformer extends TransformerAbstract
{
    public function transform(Model $model)
    {
        return [
            'id' => $model->id,
。
。
。
。

        ];
    }
}    

 6.api鉴权

composer require tymon/jwt-auth:^1.0.0

生成jwt密匙:

php artisan jwt:secret

将config/auth.php的api guard的driver换成jwt:

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

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

修改dingoapi的设置配合jwt实现api鉴权:

config/api。php

'auth' => [
    'jwt' => 'DingoApiAuthProviderJWT',
],

在app/Models/User。php中添加:

<?php

namespace AppModels;

use Auth;
use SpatiePermissionTraitsHasRoles;
use TymonJWTAuthContractsJWTSubject;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateAuthMustVerifyEmail as MustVerifyEmailTrait;
use IlluminateContractsAuthMustVerifyEmail as MustVerifyEmailContract;

class User extends Authenticatable implements MustVerifyEmailContract, JWTSubject

.
.
.
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

7.授权,获取token:

1.Auth::guard('api')->attempt($credentials))
   Auth::guard('api')->factory()->getTTL() * 60
2.Auth::guard('api')->fromUser($user);
   Auth::guard('api')->factory()->getTTL() * 60

8.刷新删除token

1.$token = Auth::guard('api')->refresh();
2.Auth::guard('api')->logout();

9.访问需要授权的接口

在请求的header中添加:

Authorization: Bearer {token}

10.开发时用arisan 获取token

1.创建command

2.

public function handle()
    {
        $userId = $this->ask('输入用户 id');

        $user = User::find($userId);

        if (!$user) {
            return $this->error('用户不存在');
        }

        // 过期时间
        $ttl = 365*24*60;
        $this->info(Auth::guard('api')->setTTL($ttl)->fromUser($user));
    }
}

 

原文地址:https://www.cnblogs.com/ComputerPlayerJs/p/10856641.html