xiansin před 2 roky
rodič
revize
c3cb5c749c

+ 5 - 3
mini/App.vue

@@ -8,9 +8,11 @@ export default {
         this.$store.dispatch('user/info', res.data)
         this.$store.dispatch('user/info', res.data)
       })
       })
     } else {
     } else {
-      // uni.redirectTo({
-      //   url: '/pages/login/index'
-      // })
+      await this.$api.user.login().then(res => {
+        const { token, user_info } = res.data
+        this.$store.dispatch('user/token', token)
+        this.$store.dispatch('user/info', user_info)
+      })
     }
     }
   },
   },
   onShow() {
   onShow() {

+ 18 - 2
mini/api/user/index.js

@@ -13,10 +13,11 @@ export async function login() {
     uni.login({
     uni.login({
       provider: uni.$u.platform,
       provider: uni.$u.platform,
       success: loginRes => {
       success: loginRes => {
+        console.log('-->data', loginRes)
         uni.hideLoading()
         uni.hideLoading()
         return request.post(
         return request.post(
-          '/passport/login',
-          { code: loginRes.code }
+          '/auth/bytedance',
+          { code: loginRes.code, anonymousCode: loginRes.anonymousCode }
         ).then(res => {
         ).then(res => {
           resolve(res)
           resolve(res)
         })
         })
@@ -25,11 +26,26 @@ export async function login() {
   })
   })
 }
 }
 
 
+export function update(data) {
+  return request.post(
+    'user/update',
+    data
+  )
+}
+
+export async function info() {
+  return request.get(
+    'user/info'
+  )
+}
+
 export function isLogin() {
 export function isLogin() {
   return !!getToken()
   return !!getToken()
 }
 }
 
 
 export default {
 export default {
   login,
   login,
+  update,
+  info,
   isLogin
   isLogin
 }
 }

+ 1 - 1
mini/utils/request/index.js

@@ -6,7 +6,7 @@ uni.$u.http.setConfig((config) => {
   config.header = {
   config.header = {
     'Content-Type': 'application/x-www-form-urlencoded',
     'Content-Type': 'application/x-www-form-urlencoded',
     'X-Requested-With': 'XMLHttpRequest',
     'X-Requested-With': 'XMLHttpRequest',
-    'Accept': 'application/vnd.member.v1+json'
+    'Accept': 'application/vnd.api.v1+json'
   }
   }
   if (store.getters.token) {
   if (store.getters.token) {
     config.header['Authorization'] = store.getters.token
     config.header['Authorization'] = store.getters.token

+ 1 - 1
mini/utils/request/responseInterceptors.js

@@ -12,7 +12,7 @@ module.exports = vm => {
         vm.$store.dispatch('user/token', authorization)
         vm.$store.dispatch('user/token', authorization)
       }
       }
 
 
-      if (data.code !== 200) {
+      if (data.code !== 0) {
         uni.showModal({
         uni.showModal({
           title: '提示',
           title: '提示',
           content: data.message,
           content: data.message,

+ 18 - 18
server/app/Admin/Controllers/Setting/PayConfigController.php

@@ -20,18 +20,18 @@ class PayConfigController extends AdminController
         return Grid::make(PayConfig::with(['setting']), function (Grid $grid) {
         return Grid::make(PayConfig::with(['setting']), function (Grid $grid) {
 
 
             $grid->disableColumnSelector();
             $grid->disableColumnSelector();
-            $grid->column('mini_app_id')->editable();
-            $grid->column('mini_app_key')->display('*****');
-            $grid->column('wechat_app_id')->editable();
-            $grid->column('wechat_app_key')->display('*****');
-            $grid->column('wechat_apiclient_key')->display('*****');
-            $grid->column('wechat_apiclient_cert')->display('*****');
-            $grid->column('alipay_app_id')->editable();
-            $grid->column('alipay_app_key')->display('*****');
-            $grid->column('alipay_app_secret')->display('*****');
+//            $grid->column('mini_app_id')->editable();
+//            $grid->column('mini_app_key')->display('*****');
+//            $grid->column('wechat_app_id')->editable();
+//            $grid->column('wechat_app_key')->display('*****');
+//            $grid->column('wechat_apiclient_key')->display('*****');
+//            $grid->column('wechat_apiclient_cert')->display('*****');
             $grid->column('douyin_app_id')->editable();
             $grid->column('douyin_app_id')->editable();
             $grid->column('douyin_app_key')->display('*****');
             $grid->column('douyin_app_key')->display('*****');
             $grid->column('douyin_app_secret')->display('*****');
             $grid->column('douyin_app_secret')->display('*****');
+            $grid->column('alipay_app_id')->editable();
+            $grid->column('alipay_app_key')->display('*****');
+            $grid->column('alipay_app_secret')->display('*****');
             $grid->column('setting.is_watch_auto_pay',trans('setting.fields.is_watch_auto_pay'))->switch();
             $grid->column('setting.is_watch_auto_pay',trans('setting.fields.is_watch_auto_pay'))->switch();
 
 
 
 
@@ -79,18 +79,18 @@ class PayConfigController extends AdminController
     {
     {
         return Form::make(PayConfig::with(['setting']), function (Form $form) {
         return Form::make(PayConfig::with(['setting']), function (Form $form) {
             $form->display('id');
             $form->display('id');
-            $form->text('mini_app_id');
-            $form->text('mini_app_key');
-            $form->text('wechat_app_id');
-            $form->text('wechat_app_key');
-            $form->textarea('wechat_apiclient_key');
-            $form->textarea('wechat_apiclient_cert');
-            $form->text('alipay_app_id');
-            $form->textarea('alipay_app_key');
-            $form->textarea('alipay_app_secret');
+//            $form->text('mini_app_id');
+//            $form->text('mini_app_key');
+//            $form->text('wechat_app_id');
+//            $form->text('wechat_app_key');
+//            $form->textarea('wechat_apiclient_key');
+//            $form->textarea('wechat_apiclient_cert');
             $form->text('douyin_app_id');
             $form->text('douyin_app_id');
             $form->textarea('douyin_app_key');
             $form->textarea('douyin_app_key');
             $form->textarea('douyin_app_secret');
             $form->textarea('douyin_app_secret');
+            $form->text('alipay_app_id');
+            $form->textarea('alipay_app_key');
+            $form->textarea('alipay_app_secret');
             $form->switch('setting.is_watch_auto_pay',trans('setting.fields.is_watch_auto_pay'))->default(0);
             $form->switch('setting.is_watch_auto_pay',trans('setting.fields.is_watch_auto_pay'))->default(0);
 
 
             $form->disableViewButton();
             $form->disableViewButton();

+ 129 - 0
server/app/Helper/ByteDance.php

@@ -0,0 +1,129 @@
+<?php
+
+namespace App\Helper;
+
+use App\Helper\Bytedance\ByteDanceAPI;
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
+use PharIo\Manifest\Email;
+use think\Exception;
+
+class ByteDance
+{
+
+    private $appId = null;
+    private $appKey = null;
+
+    private $secret = null;
+
+    private $accessTokenFile = null;
+    private $accessToken = null;
+
+    /**
+     * @param array $config
+     * @return $this
+     */
+    public function factory($config = [])
+    {
+        $this->appId = $config['app_id'];
+        $this->appKey = $config['app_key'];
+        $this->secret = $config['app_secret'];
+        $this->accessTokenFile = storage_path('app/bytedance/bytedance_access_token.json');
+        $this->accessToken = $this->checkAccessToken();
+        return $this;
+    }
+
+    /**
+     * @param string $code
+     * @param string $anonymousCode
+     * @return array|mixed
+     * @throws \Exception
+     */
+    public function login($code = '',$anonymousCode = '')
+    {
+        return $this->post(ByteDanceAPI::LOGIN, [
+            'code' => $code,
+            'anonymous_code' => $anonymousCode,
+        ]);
+    }
+
+    /**
+     * 校验access token 是否过期
+     * @return mixed
+     */
+    private function checkAccessToken() : string
+    {
+        try {
+            $dir = storage_path('app/bytedance');
+            if (!is_dir($dir)) mkdir($dir, 0755);
+            if (!is_file($this->accessTokenFile)) touch($this->accessTokenFile);
+
+            $accessToken = file_get_contents($this->accessTokenFile);
+            $accessToken = $accessToken ? json_decode($accessToken,true) : null;
+            if (empty($accessToken) || $accessToken['expires_at'] < time()) {
+                $accessToken = $this->getAccessToken();
+            }else{
+                $accessToken = $accessToken['access_token'];
+            }
+            return $accessToken;
+        } catch (\Exception $e) {
+
+        }
+    }
+
+
+    /**
+     * 获取 access token
+     * @throws \Exception
+     */
+    private function getAccessToken() : string
+    {
+        $res = $this->post(ByteDanceAPI::ACCESS_TOKEN, [
+            'grant_type' => 'client_credential'
+        ]);
+        if (!empty($res['err_no'])) {
+            throw new \Exception('获取access token 错误');
+        }
+
+        file_put_contents($this->accessTokenFile, json_encode([
+            'access_token' => $res['access_token'],
+            'expires_at'   => $res['expiresAt']
+        ]));
+
+        return $res['access_token'];
+    }
+
+    /**
+     * 接口请求
+     *
+     * @param string $uri
+     * @param array  $data
+     * @return array|mixed
+     * @throws \Exception
+     */
+    private function post($uri = '', $data = []) : array
+    {
+        try {
+            $data = array_merge($data,[
+                'appid'      => $this->appId,
+                'secret'     => $this->secret,
+            ]);
+
+            $client = new Client();
+            $res = $client->post($uri, [
+                'verify'  => false,
+                'headers' => ['Content-Type' => 'application/json'],
+                'body'    => json_encode($data)
+            ]);
+            $stringBody = (string)$res->getBody();
+            $res = json_decode($stringBody, true);
+            if(!empty($res['err_no'])){
+                throw new \Exception("请求字节跳动API接口错误,错误码:{$res['err_no']},错误信息:{$res['err_tips']}");
+            }
+            return $res['data'];
+        } catch (GuzzleException $e) {
+            trace($e->getMessage(), 'error');
+            throw new \Exception($e->getMessage());
+        }
+    }
+}

+ 20 - 0
server/app/Helper/Bytedance/ByteDanceAPI.php

@@ -0,0 +1,20 @@
+<?php
+namespace App\Helper\Bytedance;
+
+define('BASE_URL','https://developer.toutiao.com/api/apps/v2');
+final class ByteDanceAPI
+{
+
+
+    /**
+     * 获取 ACCESS_TOKEN
+     * @url https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/server/interface-request-credential/get-access-token
+     */
+    const ACCESS_TOKEN = BASE_URL.'/token';
+
+    /**
+     * 登陆
+     * @url https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/server/log-in/code-2-session
+     */
+    const LOGIN = BASE_URL.'/jscode2session';
+}

+ 40 - 0
server/app/Http/Controllers/V1/AuthController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\V1;
 
 
 use App\Models\Job;
 use App\Models\Job;
 use App\Models\User;
 use App\Models\User;
+use App\Models\UserInfo;
 use App\Services\Api\ErrorMsgServive;
 use App\Services\Api\ErrorMsgServive;
 use App\Services\Api\UserService;
 use App\Services\Api\UserService;
 use App\Services\JPushService;
 use App\Services\JPushService;
@@ -157,6 +158,45 @@ class AuthController extends Controller
 
 
     }
     }
 
 
+    // 字节跳动登陆 code
+    public function bytedance(Request $request)
+    {
+        try {
+            $code = $request->input('code');
+            $anonymousCode = $request->input('anonymousCode');
+            $app = $this->getByteDanceFactory();
+            $res = $app->login($code, $anonymousCode);
+
+            $openId = $res['openid'];
+            $user = User::where('open_id', $openId)->first();
+            if (!$user) {
+                $user = new User();
+                $user->open_id = $openId;
+                $user->union_id = $res['unionid'];
+                $user->remember_token = $res['session_key'];
+                $id = $user->save();
+
+                $info = new UserInfo();
+                $info->user_id = $user->id;
+                $info->platform = 1;
+                $info->save();
+
+                $user = User::where('id', $user->id)->first();
+            }
+
+            $token = Auth::guard('api')->fromUser($user);
+            $user = User::with(['info'])->where('id', $user->id)->first();
+            $data = [
+                'token' => "Bearer " . $token,
+                'user_info' => $user,
+            ];
+            return $this->success($data);
+        } catch (\Exception $e) {
+            ErrorMsgServive::write($e, \request()->url());
+            return $this->error('字节授权登陆出错');
+        }
+    }
+
     //执行登录
     //执行登录
     public function doLogin($user, $jpush_reg_id = null)
     public function doLogin($user, $jpush_reg_id = null)
     {
     {

+ 12 - 0
server/app/Http/Controllers/V1/Controller.php

@@ -2,6 +2,8 @@
 
 
 namespace App\Http\Controllers\V1;
 namespace App\Http\Controllers\V1;
 
 
+use App\Helper\ByteDance;
+use App\Models\PayConfig;
 use Dingo\Api\Routing\Helpers;
 use Dingo\Api\Routing\Helpers;
 use Illuminate\Foundation\Bus\DispatchesJobs;
 use Illuminate\Foundation\Bus\DispatchesJobs;
 use Illuminate\Routing\Controller as BaseController;
 use Illuminate\Routing\Controller as BaseController;
@@ -57,4 +59,14 @@ class Controller extends BaseController
         return response()->json($result);
         return response()->json($result);
     }
     }
 
 
+    protected function getByteDanceFactory()
+    {
+        $setting = PayConfig::first();
+        return (new ByteDance())->factory([
+            'app_id'    => $setting->douyin_app_id,
+            'app_key'    => $setting->douyin_app_key,
+            'app_secret'    => $setting->douyin_app_secret,
+        ]);
+    }
+
 }
 }

+ 23 - 0
server/app/Http/Controllers/V1/UserController.php

@@ -70,6 +70,29 @@ class UserController extends Controller
         return $this->success($list);
         return $this->success($list);
     }
     }
 
 
+    public function info()
+    {
+        $user = auth('api')->user();
+        $user = User::with(['info'])->where('id', $user->id)->first();
+        return $this->success($user);
+    }
+
+    public function update(Request $request)
+    {
+        $data = $request->input('rawData');
+        $data = json_decode($data,true);
+        $user = auth('api')->user();
+        $user = User::with(['info'])->where('id', $user->id)->first();
+        if (isset($data['nickName'])) {
+            $user->nickname = $data['nickName'];
+        }
+        if (isset($data['avatarUrl'])) {
+            $user->avatar = $data['avatarUrl'];
+        }
+        $user->save();
+        return $this->success($user);
+    }
+
     // h5 绑定
     // h5 绑定
     public function h5Bind()
     public function h5Bind()
     {
     {

+ 0 - 3
server/app/Http/Kernel.php

@@ -63,8 +63,5 @@ class Kernel extends HttpKernel
         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
-
-        # 多表
-        'api.role' => \App\Http\Middleware\JWTRoleAuth::class,
     ];
     ];
 }
 }

+ 0 - 56
server/app/Http/Middleware/JWTRoleAuth.php

@@ -1,56 +0,0 @@
-<?php
-
-namespace App\Http\Middleware;
-
-use App\Helpers\Constants;
-use Closure;
-use Illuminate\Auth\AuthenticationException;
-use Illuminate\Validation\UnauthorizedException;
-use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
-use Tymon\JWTAuth\Exceptions\JWTException;
-use Tymon\JWTAuth\Exceptions\TokenBlacklistedException;
-use Tymon\JWTAuth\Exceptions\TokenExpiredException;
-use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
-
-class JWTRoleAuth extends BaseMiddleware
-{
-    /**
-     * Handle an incoming request.
-     *
-     * @param         $request
-     * @param Closure $next
-     * @param null    $guard
-     * @return mixed
-     * @throws TokenExpiredException
-     */
-    public function handle($request, Closure $next, $guard = null)
-    {
-        try {
-            $this->checkForToken($request);
-
-            $tokenRole = $this->auth->parseToken()->getClaim('role');
-
-        }catch (TokenExpiredException $e) {
-            // 处理刷新 token 的异常
-            try {
-                // token 过期
-                $sToken = auth($guard)->refresh();
-                \Auth::guard($guard)->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']);
-                return $this->setAuthenticationHeader($next($request), $sToken);
-
-            }catch (JWTException $exception) {
-                // token 令牌 刷新时间超时,或使用失效的 token 刷新
-                throw new TokenExpiredException('登录超时请重新登录');
-            }
-        }catch (JWTException $e) {
-            throw new UnauthorizedHttpException('jwt-auth', '请登录后再进行访问');
-        }
-
-        // 判断token角色。
-        if ($tokenRole != $guard) {
-            throw new UnauthorizedException('您当前不能访问该接口');
-        }
-
-        return $next($request);
-    }
-}

+ 2 - 0
server/app/Models/User.php

@@ -73,6 +73,8 @@ class User extends Authenticatable implements JWTSubject
     protected $hidden = [
     protected $hidden = [
         'password',
         'password',
         'remember_token',
         'remember_token',
+        'updated_at',
+        'deleted_at',
     ];
     ];
 
 
     public function getJWTIdentifier()
     public function getJWTIdentifier()

+ 10 - 0
server/app/Models/UserInfo.php

@@ -39,4 +39,14 @@ class UserInfo extends Model
 {
 {
     use HasFactory;
     use HasFactory;
     protected $table = 'user_info';
     protected $table = 'user_info';
+
+    protected $hidden = [
+        'updated_at','deleted_at','created_at'
+    ];
+
+
+    protected function serializeDate(\DateTimeInterface $date)
+    {
+        return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
+    }
 }
 }

+ 2 - 2
server/composer.json

@@ -24,13 +24,13 @@
         "overtrue/laravel-lang": "^3.0",
         "overtrue/laravel-lang": "^3.0",
         "overtrue/laravel-wechat": "^5.1",
         "overtrue/laravel-wechat": "^5.1",
         "php-open-source-saver/jwt-auth": "^1.4",
         "php-open-source-saver/jwt-auth": "^1.4",
-        "tymon/jwt-auth": "^1.0",
         "prettus/l5-repository": "^2.7",
         "prettus/l5-repository": "^2.7",
         "socialiteproviders/facebook": "^4.1",
         "socialiteproviders/facebook": "^4.1",
         "socialiteproviders/weixin": "^4.1",
         "socialiteproviders/weixin": "^4.1",
         "stomp-php/stomp-php": "^5.0",
         "stomp-php/stomp-php": "^5.0",
         "tencent/tls-sig-api-v2": "1.0",
         "tencent/tls-sig-api-v2": "1.0",
-        "tencentcloud/tencentcloud-sdk-php": "^3.0"
+        "tencentcloud/tencentcloud-sdk-php": "^3.0",
+        "ext-json": "*"
     },
     },
     "require-dev": {
     "require-dev": {
         "barryvdh/laravel-ide-helper": "^2.12",
         "barryvdh/laravel-ide-helper": "^2.12",

+ 99 - 199
server/composer.lock

@@ -4,11 +4,11 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
         "This file is @generated automatically"
     ],
     ],
-    "content-hash": "c5cab4239b495a62c93f2c6a26e9cbdb",
+    "content-hash": "ad3ea976110ace9ca36860a8e1a4798c",
     "packages": [
     "packages": [
         {
         {
             "name": "adbario/php-dot-notation",
             "name": "adbario/php-dot-notation",
-            "version": "2.3.0",
+            "version": "2.4.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/adbario/php-dot-notation.git",
                 "url": "https://github.com/adbario/php-dot-notation.git",
@@ -61,7 +61,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/adbario/php-dot-notation/issues",
                 "issues": "https://github.com/adbario/php-dot-notation/issues",
-                "source": "https://github.com/adbario/php-dot-notation/tree/2.3.0"
+                "source": "https://github.com/adbario/php-dot-notation/tree/2.4.0"
             },
             },
             "time": "2022-07-12T02:52:50+00:00"
             "time": "2022-07-12T02:52:50+00:00"
         },
         },
@@ -572,16 +572,16 @@
         },
         },
         {
         {
             "name": "brick/math",
             "name": "brick/math",
-            "version": "0.9.3",
+            "version": "0.10.1",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/brick/math.git",
                 "url": "https://github.com/brick/math.git",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
+                "reference": "de846578401f4e58f911b3afeb62ced56365ed87"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
+                "url": "https://api.github.com/repos/brick/math/zipball/de846578401f4e58f911b3afeb62ced56365ed87",
+                "reference": "de846578401f4e58f911b3afeb62ced56365ed87",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -592,12 +592,12 @@
             },
             },
             "require": {
             "require": {
                 "ext-json": "*",
                 "ext-json": "*",
-                "php": "^7.1 || ^8.0"
+                "php": "^7.4 || ^8.0"
             },
             },
             "require-dev": {
             "require-dev": {
                 "php-coveralls/php-coveralls": "^2.2",
                 "php-coveralls/php-coveralls": "^2.2",
-                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
-                "vimeo/psalm": "4.9.2"
+                "phpunit/phpunit": "^9.0",
+                "vimeo/psalm": "4.25.0"
             },
             },
             "type": "library",
             "type": "library",
             "autoload": {
             "autoload": {
@@ -622,19 +622,15 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/brick/math/issues",
                 "issues": "https://github.com/brick/math/issues",
-                "source": "https://github.com/brick/math/tree/0.9.3"
+                "source": "https://github.com/brick/math/tree/0.10.1"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
                     "url": "https://github.com/BenMorel",
                     "url": "https://github.com/BenMorel",
                     "type": "github"
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/brick/math",
-                    "type": "tidelift"
                 }
                 }
             ],
             ],
-            "time": "2021-08-15T20:50:18+00:00"
+            "time": "2022-08-01T22:54:31+00:00"
         },
         },
         {
         {
             "name": "clagiordano/weblibs-configmanager",
             "name": "clagiordano/weblibs-configmanager",
@@ -1227,16 +1223,16 @@
         },
         },
         {
         {
             "name": "doctrine/dbal",
             "name": "doctrine/dbal",
-            "version": "3.3.7",
+            "version": "3.4.1",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "9f79d4650430b582f4598fe0954ef4d52fbc0a8a"
+                "reference": "94e016428884227245fb1219e0de7d8b86ca16d7"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f79d4650430b582f4598fe0954ef4d52fbc0a8a",
-                "reference": "9f79d4650430b582f4598fe0954ef4d52fbc0a8a",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/94e016428884227245fb1219e0de7d8b86ca16d7",
+                "reference": "94e016428884227245fb1219e0de7d8b86ca16d7",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -1250,21 +1246,21 @@
                 "doctrine/cache": "^1.11|^2.0",
                 "doctrine/cache": "^1.11|^2.0",
                 "doctrine/deprecations": "^0.5.3|^1",
                 "doctrine/deprecations": "^0.5.3|^1",
                 "doctrine/event-manager": "^1.0",
                 "doctrine/event-manager": "^1.0",
-                "php": "^7.3 || ^8.0",
+                "php": "^7.4 || ^8.0",
                 "psr/cache": "^1|^2|^3",
                 "psr/cache": "^1|^2|^3",
                 "psr/log": "^1|^2|^3"
                 "psr/log": "^1|^2|^3"
             },
             },
             "require-dev": {
             "require-dev": {
                 "doctrine/coding-standard": "9.0.0",
                 "doctrine/coding-standard": "9.0.0",
                 "jetbrains/phpstorm-stubs": "2022.1",
                 "jetbrains/phpstorm-stubs": "2022.1",
-                "phpstan/phpstan": "1.7.13",
-                "phpstan/phpstan-strict-rules": "^1.2",
-                "phpunit/phpunit": "9.5.20",
-                "psalm/plugin-phpunit": "0.16.1",
-                "squizlabs/php_codesniffer": "3.7.0",
-                "symfony/cache": "^5.2|^6.0",
-                "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
-                "vimeo/psalm": "4.23.0"
+                "phpstan/phpstan": "1.8.2",
+                "phpstan/phpstan-strict-rules": "^1.3",
+                "phpunit/phpunit": "9.5.21",
+                "psalm/plugin-phpunit": "0.17.0",
+                "squizlabs/php_codesniffer": "3.7.1",
+                "symfony/cache": "^5.4|^6.0",
+                "symfony/console": "^4.4|^5.4|^6.0",
+                "vimeo/psalm": "4.24.0"
             },
             },
             "suggest": {
             "suggest": {
                 "symfony/console": "For helpful console commands such as SQL execution and import of files."
                 "symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -1324,7 +1320,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.3.7"
+                "source": "https://github.com/doctrine/dbal/tree/3.4.1"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -1340,7 +1336,7 @@
                     "type": "tidelift"
                     "type": "tidelift"
                 }
                 }
             ],
             ],
-            "time": "2022-06-13T21:43:03+00:00"
+            "time": "2022-08-16T18:37:46+00:00"
         },
         },
         {
         {
             "name": "doctrine/deprecations",
             "name": "doctrine/deprecations",
@@ -1952,16 +1948,16 @@
         },
         },
         {
         {
             "name": "giggsey/libphonenumber-for-php",
             "name": "giggsey/libphonenumber-for-php",
-            "version": "8.12.51",
+            "version": "8.12.53",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/giggsey/libphonenumber-for-php.git",
                 "url": "https://github.com/giggsey/libphonenumber-for-php.git",
-                "reference": "a42d89a46797083a95aa48393485fdac22fcac94"
+                "reference": "2e39201ca4b88c1ec0594cd78128d21e94929d04"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/a42d89a46797083a95aa48393485fdac22fcac94",
-                "reference": "a42d89a46797083a95aa48393485fdac22fcac94",
+                "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/2e39201ca4b88c1ec0594cd78128d21e94929d04",
+                "reference": "2e39201ca4b88c1ec0594cd78128d21e94929d04",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -2027,7 +2023,7 @@
                 "issues": "https://github.com/giggsey/libphonenumber-for-php/issues",
                 "issues": "https://github.com/giggsey/libphonenumber-for-php/issues",
                 "source": "https://github.com/giggsey/libphonenumber-for-php"
                 "source": "https://github.com/giggsey/libphonenumber-for-php"
             },
             },
-            "time": "2022-07-11T08:12:34+00:00"
+            "time": "2022-08-08T06:53:30+00:00"
         },
         },
         {
         {
             "name": "giggsey/locale",
             "name": "giggsey/locale",
@@ -3295,16 +3291,16 @@
         },
         },
         {
         {
             "name": "laravel/socialite",
             "name": "laravel/socialite",
-            "version": "v5.5.3",
+            "version": "v5.5.4",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/laravel/socialite.git",
                 "url": "https://github.com/laravel/socialite.git",
-                "reference": "9dfc76b31ee041c45a7cae86f23339784abde46d"
+                "reference": "3eec261bf83690dd85812587457f093e3156dca6"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/socialite/zipball/9dfc76b31ee041c45a7cae86f23339784abde46d",
-                "reference": "9dfc76b31ee041c45a7cae86f23339784abde46d",
+                "url": "https://api.github.com/repos/laravel/socialite/zipball/3eec261bf83690dd85812587457f093e3156dca6",
+                "reference": "3eec261bf83690dd85812587457f093e3156dca6",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3366,7 +3362,7 @@
                 "issues": "https://github.com/laravel/socialite/issues",
                 "issues": "https://github.com/laravel/socialite/issues",
                 "source": "https://github.com/laravel/socialite"
                 "source": "https://github.com/laravel/socialite"
             },
             },
-            "time": "2022-07-18T13:51:19+00:00"
+            "time": "2022-08-08T13:27:06+00:00"
         },
         },
         {
         {
             "name": "laravel/tinker",
             "name": "laravel/tinker",
@@ -3511,16 +3507,16 @@
         },
         },
         {
         {
             "name": "lcobucci/jwt",
             "name": "lcobucci/jwt",
-            "version": "4.1.5",
+            "version": "4.2.1",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/lcobucci/jwt.git",
                 "url": "https://github.com/lcobucci/jwt.git",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582"
+                "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582",
-                "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582",
+                "url": "https://api.github.com/repos/lcobucci/jwt/zipball/72ac6d807ee51a70ad376ee03a2387e8646e10f3",
+                "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -3542,12 +3538,12 @@
                 "infection/infection": "^0.21",
                 "infection/infection": "^0.21",
                 "lcobucci/coding-standard": "^6.0",
                 "lcobucci/coding-standard": "^6.0",
                 "mikey179/vfsstream": "^1.6.7",
                 "mikey179/vfsstream": "^1.6.7",
-                "phpbench/phpbench": "^1.0",
+                "phpbench/phpbench": "^1.2",
                 "phpstan/extension-installer": "^1.0",
                 "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
+                "phpstan/phpstan": "^1.4",
+                "phpstan/phpstan-deprecation-rules": "^1.0",
+                "phpstan/phpstan-phpunit": "^1.0",
+                "phpstan/phpstan-strict-rules": "^1.0",
                 "phpunit/php-invoker": "^3.1",
                 "phpunit/php-invoker": "^3.1",
                 "phpunit/phpunit": "^9.5"
                 "phpunit/phpunit": "^9.5"
             },
             },
@@ -3575,7 +3571,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/lcobucci/jwt/issues",
                 "issues": "https://github.com/lcobucci/jwt/issues",
-                "source": "https://github.com/lcobucci/jwt/tree/4.1.5"
+                "source": "https://github.com/lcobucci/jwt/tree/4.2.1"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -3587,7 +3583,7 @@
                     "type": "patreon"
                     "type": "patreon"
                 }
                 }
             ],
             ],
-            "time": "2021-09-28T19:34:56+00:00"
+            "time": "2022-08-19T23:14:07+00:00"
         },
         },
         {
         {
             "name": "league/commonmark",
             "name": "league/commonmark",
@@ -4357,16 +4353,16 @@
         },
         },
         {
         {
             "name": "nesbot/carbon",
             "name": "nesbot/carbon",
-            "version": "2.60.0",
+            "version": "2.61.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "00a259ae02b003c563158b54fb6743252b638ea6"
+                "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/00a259ae02b003c563158b54fb6743252b638ea6",
-                "reference": "00a259ae02b003c563158b54fb6743252b638ea6",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bdf4f4fe3a3eac4de84dbec0738082a862c68ba6",
+                "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -4461,7 +4457,7 @@
                     "type": "tidelift"
                     "type": "tidelift"
                 }
                 }
             ],
             ],
-            "time": "2022-07-27T15:57:48+00:00"
+            "time": "2022-08-06T12:41:24+00:00"
         },
         },
         {
         {
             "name": "nette/schema",
             "name": "nette/schema",
@@ -6336,16 +6332,16 @@
         },
         },
         {
         {
             "name": "ramsey/uuid",
             "name": "ramsey/uuid",
-            "version": "4.3.1",
+            "version": "4.4.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/ramsey/uuid.git",
                 "url": "https://github.com/ramsey/uuid.git",
-                "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28"
+                "reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28",
-                "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/373f7bacfcf3de038778ff27dcce5672ddbf4c8a",
+                "reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -6355,7 +6351,7 @@
                 ]
                 ]
             },
             },
             "require": {
             "require": {
-                "brick/math": "^0.8 || ^0.9",
+                "brick/math": "^0.8 || ^0.9 || ^0.10",
                 "ext-ctype": "*",
                 "ext-ctype": "*",
                 "ext-json": "*",
                 "ext-json": "*",
                 "php": "^8.0",
                 "php": "^8.0",
@@ -6371,7 +6367,6 @@
                 "doctrine/annotations": "^1.8",
                 "doctrine/annotations": "^1.8",
                 "ergebnis/composer-normalize": "^2.15",
                 "ergebnis/composer-normalize": "^2.15",
                 "mockery/mockery": "^1.3",
                 "mockery/mockery": "^1.3",
-                "moontoast/math": "^1.1",
                 "paragonie/random-lib": "^2",
                 "paragonie/random-lib": "^2",
                 "php-mock/php-mock": "^2.2",
                 "php-mock/php-mock": "^2.2",
                 "php-mock/php-mock-mockery": "^1.3",
                 "php-mock/php-mock-mockery": "^1.3",
@@ -6420,7 +6415,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/ramsey/uuid/issues",
                 "issues": "https://github.com/ramsey/uuid/issues",
-                "source": "https://github.com/ramsey/uuid/tree/4.3.1"
+                "source": "https://github.com/ramsey/uuid/tree/4.4.0"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -6432,7 +6427,7 @@
                     "type": "tidelift"
                     "type": "tidelift"
                 }
                 }
             ],
             ],
-            "time": "2022-03-27T21:42:02+00:00"
+            "time": "2022-08-05T17:58:37+00:00"
         },
         },
         {
         {
             "name": "socialiteproviders/facebook",
             "name": "socialiteproviders/facebook",
@@ -6758,16 +6753,16 @@
         },
         },
         {
         {
             "name": "stella-maris/clock",
             "name": "stella-maris/clock",
-            "version": "0.1.4",
+            "version": "0.1.5",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
-                "url": "https://gitlab.com/stella-maris/clock.git",
-                "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf"
+                "url": "git@gitlab.com:stella-maris/clock.git",
+                "reference": "447879c53ca0b2a762cdbfba5e76ccf4deca9158"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://gitlab.com/api/v4/projects/stella-maris%2Fclock/repository/archive.zip?sha=8a0a967896df4c63417385dc69328a0aec84d9cf",
-                "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf",
+                "url": "https://gitlab.com/api/v4/projects/stella-maris%2Fclock/repository/archive.zip?sha=447879c53ca0b2a762cdbfba5e76ccf4deca9158",
+                "reference": "447879c53ca0b2a762cdbfba5e76ccf4deca9158",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -6803,11 +6798,7 @@
                 "point in time",
                 "point in time",
                 "psr20"
                 "psr20"
             ],
             ],
-            "support": {
-                "issues": "https://gitlab.com/stella-maris/clock/-/issues",
-                "source": "https://gitlab.com/stella-maris/clock/-/tree/0.1.4"
-            },
-            "time": "2022-04-17T14:12:26+00:00"
+            "time": "2022-08-05T07:21:25+00:00"
         },
         },
         {
         {
             "name": "stomp-php/stomp-php",
             "name": "stomp-php/stomp-php",
@@ -9816,16 +9807,16 @@
         },
         },
         {
         {
             "name": "tencentcloud/tencentcloud-sdk-php",
             "name": "tencentcloud/tencentcloud-sdk-php",
-            "version": "3.0.696",
+            "version": "3.0.707",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git",
                 "url": "https://github.com/TencentCloud/tencentcloud-sdk-php.git",
-                "reference": "8ff60ad685b479971a6536d26c6563d0dccbf0a4"
+                "reference": "8ebf5f8439e5ae0a752dd6ca5efcff337e9311a5"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/8ff60ad685b479971a6536d26c6563d0dccbf0a4",
-                "reference": "8ff60ad685b479971a6536d26c6563d0dccbf0a4",
+                "url": "https://api.github.com/repos/TencentCloud/tencentcloud-sdk-php/zipball/8ebf5f8439e5ae0a752dd6ca5efcff337e9311a5",
+                "reference": "8ebf5f8439e5ae0a752dd6ca5efcff337e9311a5",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -9863,9 +9854,9 @@
             "homepage": "https://github.com/TencentCloud/tencentcloud-sdk-php",
             "homepage": "https://github.com/TencentCloud/tencentcloud-sdk-php",
             "support": {
             "support": {
                 "issues": "https://github.com/TencentCloud/tencentcloud-sdk-php/issues",
                 "issues": "https://github.com/TencentCloud/tencentcloud-sdk-php/issues",
-                "source": "https://github.com/TencentCloud/tencentcloud-sdk-php/tree/3.0.696"
+                "source": "https://github.com/TencentCloud/tencentcloud-sdk-php/tree/3.0.707"
             },
             },
-            "time": "2022-08-04T03:43:23+00:00"
+            "time": "2022-08-18T06:57:42+00:00"
         },
         },
         {
         {
             "name": "tijsverkoyen/css-to-inline-styles",
             "name": "tijsverkoyen/css-to-inline-styles",
@@ -9926,98 +9917,6 @@
             },
             },
             "time": "2021-12-08T09:12:39+00:00"
             "time": "2021-12-08T09:12:39+00:00"
         },
         },
-        {
-            "name": "tymon/jwt-auth",
-            "version": "dev-develop",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/tymondesigns/jwt-auth.git",
-                "reference": "014be8d493d228d14bbc291b24e835d330c092a0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/014be8d493d228d14bbc291b24e835d330c092a0",
-                "reference": "014be8d493d228d14bbc291b24e835d330c092a0",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "illuminate/auth": "^5.2|^6|^7|^8|^9",
-                "illuminate/contracts": "^5.2|^6|^7|^8|^9",
-                "illuminate/http": "^5.2|^6|^7|^8|^9",
-                "illuminate/support": "^5.2|^6|^7|^8|^9",
-                "lcobucci/jwt": "^3.4|^4.0",
-                "namshi/jose": "^7.0",
-                "nesbot/carbon": "^1.0|^2.0",
-                "php": "^7.4|^8.0"
-            },
-            "require-dev": {
-                "illuminate/console": "^5.2|^6|^7|^8|^9",
-                "illuminate/database": "^5.2|^6|^7|^8|^9",
-                "illuminate/routing": "^5.2|^6|^7|^8|^9",
-                "mockery/mockery": ">=0.9.9",
-                "phpunit/phpunit": "^8.5|^9.4",
-                "yoast/phpunit-polyfills": "^0.2.0"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-develop": "1.0-dev"
-                },
-                "laravel": {
-                    "aliases": {
-                        "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth",
-                        "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory"
-                    },
-                    "providers": [
-                        "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Tymon\\JWTAuth\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Sean Tymon",
-                    "email": "tymon148@gmail.com",
-                    "homepage": "https://tymon.xyz",
-                    "role": "Developer"
-                }
-            ],
-            "description": "JSON Web Token Authentication for Laravel and Lumen",
-            "homepage": "https://github.com/tymondesigns/jwt-auth",
-            "keywords": [
-                "Authentication",
-                "JSON Web Token",
-                "auth",
-                "jwt",
-                "laravel"
-            ],
-            "support": {
-                "issues": "https://github.com/tymondesigns/jwt-auth/issues",
-                "source": "https://github.com/tymondesigns/jwt-auth"
-            },
-            "funding": [
-                {
-                    "url": "https://www.patreon.com/seantymon",
-                    "type": "patreon"
-                }
-            ],
-            "time": "2022-04-27T08:53:50+00:00"
-        },
         {
         {
             "name": "vlucas/phpdotenv",
             "name": "vlucas/phpdotenv",
             "version": "v5.4.1",
             "version": "v5.4.1",
@@ -10624,16 +10523,16 @@
         },
         },
         {
         {
             "name": "facade/flare-client-php",
             "name": "facade/flare-client-php",
-            "version": "1.9.1",
+            "version": "1.10.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/facade/flare-client-php.git",
                 "url": "https://github.com/facade/flare-client-php.git",
-                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
+                "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
-                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
+                "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8",
+                "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -10652,7 +10551,7 @@
             },
             },
             "require-dev": {
             "require-dev": {
                 "friendsofphp/php-cs-fixer": "^2.14",
                 "friendsofphp/php-cs-fixer": "^2.14",
-                "phpunit/phpunit": "^7.5.16",
+                "phpunit/phpunit": "^7.5",
                 "spatie/phpunit-snapshot-assertions": "^2.0"
                 "spatie/phpunit-snapshot-assertions": "^2.0"
             },
             },
             "type": "library",
             "type": "library",
@@ -10683,7 +10582,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/facade/flare-client-php/issues",
                 "issues": "https://github.com/facade/flare-client-php/issues",
-                "source": "https://github.com/facade/flare-client-php/tree/1.9.1"
+                "source": "https://github.com/facade/flare-client-php/tree/1.10.0"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -10691,7 +10590,7 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2021-09-13T12:16:46+00:00"
+            "time": "2022-08-09T11:23:57+00:00"
         },
         },
         {
         {
             "name": "facade/ignition",
             "name": "facade/ignition",
@@ -11045,16 +10944,16 @@
         },
         },
         {
         {
             "name": "laravel/sail",
             "name": "laravel/sail",
-            "version": "v1.15.0",
+            "version": "v1.15.3",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/laravel/sail.git",
                 "url": "https://github.com/laravel/sail.git",
-                "reference": "676e1ff33c1b8af657779f62f57360c376cba666"
+                "reference": "7e7222ef0b0d7f0a0b9635543c0d7d09ef720cf1"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/sail/zipball/676e1ff33c1b8af657779f62f57360c376cba666",
-                "reference": "676e1ff33c1b8af657779f62f57360c376cba666",
+                "url": "https://api.github.com/repos/laravel/sail/zipball/7e7222ef0b0d7f0a0b9635543c0d7d09ef720cf1",
+                "reference": "7e7222ef0b0d7f0a0b9635543c0d7d09ef720cf1",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -11107,7 +11006,7 @@
                 "issues": "https://github.com/laravel/sail/issues",
                 "issues": "https://github.com/laravel/sail/issues",
                 "source": "https://github.com/laravel/sail"
                 "source": "https://github.com/laravel/sail"
             },
             },
-            "time": "2022-06-24T13:56:11+00:00"
+            "time": "2022-08-16T14:53:54+00:00"
         },
         },
         {
         {
             "name": "mockery/mockery",
             "name": "mockery/mockery",
@@ -11543,16 +11442,16 @@
         },
         },
         {
         {
             "name": "phpunit/php-code-coverage",
             "name": "phpunit/php-code-coverage",
-            "version": "9.2.15",
+            "version": "9.2.16",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+                "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
-                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073",
+                "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -11565,7 +11464,7 @@
                 "ext-dom": "*",
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.13.0",
+                "nikic/php-parser": "^4.14",
                 "php": ">=7.3",
                 "php": ">=7.3",
                 "phpunit/php-file-iterator": "^3.0.3",
                 "phpunit/php-file-iterator": "^3.0.3",
                 "phpunit/php-text-template": "^2.0.2",
                 "phpunit/php-text-template": "^2.0.2",
@@ -11614,7 +11513,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -11622,7 +11521,7 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2022-03-07T09:28:20+00:00"
+            "time": "2022-08-20T05:26:47+00:00"
         },
         },
         {
         {
             "name": "phpunit/php-file-iterator",
             "name": "phpunit/php-file-iterator",
@@ -11891,16 +11790,16 @@
         },
         },
         {
         {
             "name": "phpunit/phpunit",
             "name": "phpunit/phpunit",
-            "version": "9.5.21",
+            "version": "9.5.22",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
+                "reference": "e329ac6e8744f461518272612a479fde958752fe"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
-                "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e329ac6e8744f461518272612a479fde958752fe",
+                "reference": "e329ac6e8744f461518272612a479fde958752fe",
                 "shasum": "",
                 "shasum": "",
                 "mirrors": [
                 "mirrors": [
                     {
                     {
@@ -11983,7 +11882,7 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.22"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -11995,7 +11894,7 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2022-06-19T12:14:25+00:00"
+            "time": "2022-08-20T08:25:46+00:00"
         },
         },
         {
         {
             "name": "sebastian/cli-parser",
             "name": "sebastian/cli-parser",
@@ -13120,7 +13019,8 @@
     "prefer-stable": true,
     "prefer-stable": true,
     "prefer-lowest": false,
     "prefer-lowest": false,
     "platform": {
     "platform": {
-        "php": "^7.3|^8.0"
+        "php": "^7.3|^8.0",
+        "ext-json": "*"
     },
     },
     "platform-dev": [],
     "platform-dev": [],
     "plugin-api-version": "2.0.0"
     "plugin-api-version": "2.0.0"

+ 300 - 0
server/config/jwt.php

@@ -0,0 +1,300 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | JWT Authentication Secret
+    |--------------------------------------------------------------------------
+    |
+    | Don't forget to set this in your .env file, as it will be used to sign
+    | your tokens. A helper command is provided for this:
+    | `php artisan jwt:secret`
+    |
+    | Note: This will be used for Symmetric algorithms only (HMAC),
+    | since RSA and ECDSA use a private/public key combo (See below).
+    |
+    */
+
+    'secret' => env('JWT_SECRET'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | JWT Authentication Keys
+    |--------------------------------------------------------------------------
+    |
+    | The algorithm you are using, will determine whether your tokens are
+    | signed with a random string (defined in `JWT_SECRET`) or using the
+    | following public & private keys.
+    |
+    | Symmetric Algorithms:
+    | HS256, HS384 & HS512 will use `JWT_SECRET`.
+    |
+    | Asymmetric Algorithms:
+    | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
+    |
+    */
+
+    'keys' => [
+        /*
+        |--------------------------------------------------------------------------
+        | Public Key
+        |--------------------------------------------------------------------------
+        |
+        | A path or resource to your public key.
+        |
+        | E.g. 'file://path/to/public/key'
+        |
+        */
+
+        'public' => env('JWT_PUBLIC_KEY'),
+
+        /*
+        |--------------------------------------------------------------------------
+        | Private Key
+        |--------------------------------------------------------------------------
+        |
+        | A path or resource to your private key.
+        |
+        | E.g. 'file://path/to/private/key'
+        |
+        */
+
+        'private' => env('JWT_PRIVATE_KEY'),
+
+        /*
+        |--------------------------------------------------------------------------
+        | Passphrase
+        |--------------------------------------------------------------------------
+        |
+        | The passphrase for your private key. Can be null if none set.
+        |
+        */
+
+        'passphrase' => env('JWT_PASSPHRASE'),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | JWT time to live
+    |--------------------------------------------------------------------------
+    |
+    | Specify the length of time (in minutes) that the token will be valid for.
+    | Defaults to 1 hour.
+    |
+    | You can also set this to null, to yield a never expiring token.
+    | Some people may want this behaviour for e.g. a mobile app.
+    | This is not particularly recommended, so make sure you have appropriate
+    | systems in place to revoke the token if necessary.
+    | Notice: If you set this to null you should remove 'exp' element from 'required_claims' list.
+    |
+    */
+
+    'ttl' => env('JWT_TTL', 60),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Refresh time to live
+    |--------------------------------------------------------------------------
+    |
+    | Specify the length of time (in minutes) that the token can be refreshed
+    | within. I.E. The user can refresh their token within a 2 week window of
+    | the original token being created until they must re-authenticate.
+    | Defaults to 2 weeks.
+    |
+    | You can also set this to null, to yield an infinite refresh time.
+    | Some may want this instead of never expiring tokens for e.g. a mobile app.
+    | This is not particularly recommended, so make sure you have appropriate
+    | systems in place to revoke the token if necessary.
+    |
+    */
+
+    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
+
+    /*
+    |--------------------------------------------------------------------------
+    | JWT hashing algorithm
+    |--------------------------------------------------------------------------
+    |
+    | Specify the hashing algorithm that will be used to sign the token.
+    |
+    | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL
+    | for possible values.
+    |
+    */
+
+    'algo' => env('JWT_ALGO', 'HS256'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Required Claims
+    |--------------------------------------------------------------------------
+    |
+    | Specify the required claims that must exist in any token.
+    | A TokenInvalidException will be thrown if any of these claims are not
+    | present in the payload.
+    |
+    */
+
+    'required_claims' => [
+        'iss',
+        'iat',
+        'exp',
+        'nbf',
+        'sub',
+        'jti',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Persistent Claims
+    |--------------------------------------------------------------------------
+    |
+    | Specify the claim keys to be persisted when refreshing a token.
+    | `sub` and `iat` will automatically be persisted, in
+    | addition to the these claims.
+    |
+    | Note: If a claim does not exist then it will be ignored.
+    |
+    */
+
+    'persistent_claims' => [
+        // 'foo',
+        // 'bar',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Lock Subject
+    |--------------------------------------------------------------------------
+    |
+    | This will determine whether a `prv` claim is automatically added to
+    | the token. The purpose of this is to ensure that if you have multiple
+    | authentication models e.g. `App\User` & `App\OtherPerson`, then we
+    | should prevent one authentication request from impersonating another,
+    | if 2 tokens happen to have the same id across the 2 different models.
+    |
+    | Under specific circumstances, you may want to disable this behaviour
+    | e.g. if you only have one authentication model, then you would save
+    | a little on token size.
+    |
+    */
+
+    'lock_subject' => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Leeway
+    |--------------------------------------------------------------------------
+    |
+    | This property gives the jwt timestamp claims some "leeway".
+    | Meaning that if you have any unavoidable slight clock skew on
+    | any of your servers then this will afford you some level of cushioning.
+    |
+    | This applies to the claims `iat`, `nbf` and `exp`.
+    |
+    | Specify in seconds - only if you know you need it.
+    |
+    */
+
+    'leeway' => env('JWT_LEEWAY', 0),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Blacklist Enabled
+    |--------------------------------------------------------------------------
+    |
+    | In order to invalidate tokens, you must have the blacklist enabled.
+    | If you do not want or need this functionality, then set this to false.
+    |
+    */
+
+    'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
+
+    /*
+    | -------------------------------------------------------------------------
+    | Blacklist Grace Period
+    | -------------------------------------------------------------------------
+    |
+    | When multiple concurrent requests are made with the same JWT,
+    | it is possible that some of them fail, due to token regeneration
+    | on every request.
+    |
+    | Set grace period in seconds to prevent parallel request failure.
+    |
+    */
+
+    'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Show blacklisted token option
+    |--------------------------------------------------------------------------
+    |
+    | Specify if you want to show black listed token exception on the laravel logs.
+    |
+    */
+
+    'show_black_list_exception' => env('JWT_SHOW_BLACKLIST_EXCEPTION', 0),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cookies encryption
+    |--------------------------------------------------------------------------
+    |
+    | By default Laravel encrypt cookies for security reason.
+    | If you decide to not decrypt cookies, you will have to configure Laravel
+    | to not encrypt your cookie token by adding its name into the $except
+    | array available in the middleware "EncryptCookies" provided by Laravel.
+    | see https://laravel.com/docs/master/responses#cookies-and-encryption
+    | for details.
+    |
+    | Set it to true if you want to decrypt cookies.
+    |
+    */
+
+    'decrypt_cookies' => false,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Providers
+    |--------------------------------------------------------------------------
+    |
+    | Specify the various providers used throughout the package.
+    |
+    */
+
+    'providers' => [
+        /*
+        |--------------------------------------------------------------------------
+        | JWT Provider
+        |--------------------------------------------------------------------------
+        |
+        | Specify the provider that is used to create and decode the tokens.
+        |
+        */
+
+        'jwt' => PHPOpenSourceSaver\JWTAuth\Providers\JWT\Lcobucci::class,
+
+        /*
+        |--------------------------------------------------------------------------
+        | Authentication Provider
+        |--------------------------------------------------------------------------
+        |
+        | Specify the provider that is used to authenticate users.
+        |
+        */
+
+        'auth' => PHPOpenSourceSaver\JWTAuth\Providers\Auth\Illuminate::class,
+
+        /*
+        |--------------------------------------------------------------------------
+        | Storage Provider
+        |--------------------------------------------------------------------------
+        |
+        | Specify the provider that is used to store tokens in the blacklist.
+        |
+        */
+
+        'storage' => PHPOpenSourceSaver\JWTAuth\Providers\Storage\Illuminate::class,
+    ],
+];

+ 3 - 0
server/routes/api.php

@@ -39,6 +39,7 @@ $api->version('v1', ['namespace' => 'App\Http\Controllers\V1'], function ($api)
         $api->post('h5_oauth', 'AuthController@h5Oauth'); //H5授权登录
         $api->post('h5_oauth', 'AuthController@h5Oauth'); //H5授权登录
         $api->post('mini_program', 'AuthController@miniProgram'); //微信小程序登录(微信)
         $api->post('mini_program', 'AuthController@miniProgram'); //微信小程序登录(微信)
         $api->get('mini_code', 'AuthController@miniCode'); //获取微信小程序 code
         $api->get('mini_code', 'AuthController@miniCode'); //获取微信小程序 code
+        $api->post('bytedance', 'AuthController@bytedance'); //获取微信小程序 code
 
 
     });
     });
 
 
@@ -69,6 +70,8 @@ $api->version('v1', ['namespace' => 'App\Http\Controllers\V1'], function ($api)
             $api->post('sms_rebind', 'UserController@smsReBind'); //手机号解绑
             $api->post('sms_rebind', 'UserController@smsReBind'); //手机号解绑
             $api->get('group_by_initial', 'UserController@groupByInitial'); //用户列表按照首字母分组排序,类似手机通讯录
             $api->get('group_by_initial', 'UserController@groupByInitial'); //用户列表按照首字母分组排序,类似手机通讯录
             $api->post('feedback', 'UserController@feedback'); //问题反馈
             $api->post('feedback', 'UserController@feedback'); //问题反馈
+            $api->get('info', 'UserController@info'); //用户信息
+            $api->post('update', 'UserController@update'); //更新用户信息
         });
         });
 
 
     });
     });