• 【微信小程序】安装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));
        }
    }

     

  • 相关阅读:
    通过异常处理错误-2
    通过异常处理错误-1
    线程池
    Synchronized
    持有对象-4
    持有对象-3
    持有对象-2 迭代器深入理解
    ServletContextListener
    持有对象-1
    行为参数化
  • 原文地址:https://www.cnblogs.com/ComputerPlayerJs/p/10856641.html
Copyright © 2020-2023  润新知