guessing-miniprogram/app/Http/Controllers/Api/AuthController.php

66 lines
1.8 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use Cache;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Services\Api\UserService;
use App\Http\Resources\Api\UserResource;
use App\Http\Requests\CodeRequest;
use Overtrue\LaravelWeChat\EasyWeChat;
use Illuminate\Support\Arr;
class AuthController extends ApiController
{
protected string $serviceName = UserService::class;
public function codeToSession(CodeRequest $request)
{
//绑定OPenid
$code = $request->input('code');
$app = EasyWeChat::miniApp();
$utils = $app->getUtils();
try {
$response = $utils->codeToSession($code);
}catch (\Throwable $th) {
return $this->error($th->getMessage());
}
if (Arr::get($response, 'errcode')) {
return $this->error(Arr::get($response, 'errmsg'));
}
$openid = Arr::get($response, 'openid');
$sessionKey = Arr::get($response, 'session_key');
Cache::put($openid, $sessionKey, 48*60*60);
$user = $this->service->register($openid);
$apiToken = $this->service->login($user);
return $this->success([
'user' => UserResource::make($user)->resolve(),
'api_token' => $apiToken,
'expire_in' => Carbon::parse()->addDay()->toDateTimeString()
]);
}
/**
*
*/
public function refreshToken(Request $request)
{
$user = auth('api')->user();
//撤销当前令牌
$request->user()->currentAccessToken()->delete();
//颁发新令牌
return $this->success([
'api_token' => $user->createToken(
name: 'api',
expiresAt: now()->addDay(),
)->plainTextToken,
'expire_in' => Carbon::parse()->addDay()->toDateTimeString()
]);
}
}