This commit is contained in:
2023-12-17 21:29:59 +08:00
parent 3ae0046c88
commit ec6b900318
20 changed files with 652 additions and 31 deletions

View File

@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Base;
use App\Const\Responses;
use Illuminate\Routing\Controller;
class BaseController extends Controller
{
public array $validateMethodParams = [];
function __call($method, $parameters)
{
if (isset($this->validateMethodParams[$method])) {
request()->validate($this->validateMethodParams[$method]);
}
parent::__call($method, $parameters);
}
function reply($code, $msg, $data = []): \Illuminate\Http\JsonResponse
{
return response()->json([
'code' => $code,
'msg' => $msg,
'data' => $data,
]);
}
function success($data = []): \Illuminate\Http\JsonResponse
{
return $this->reply(Responses::CODE_SUCCESS, 'success', $data);
}
function error($msg = 'error', $data = []): \Illuminate\Http\JsonResponse
{
return $this->reply(Responses::CODE_ERROR, $msg, $data);
}
}

View File

@ -0,0 +1,7 @@
<?php
namespace App\Http\Controllers\Base;
class CustomerBaseController extends BaseController
{
}

View File

@ -1,12 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, ValidatesRequests;
}

View File

@ -0,0 +1,108 @@
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Base\CustomerBaseController;
use App\Models\Customer\CustomerUser;
use App\Service\AuthService;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ValidatedInput;
class CustomerUserController extends CustomerBaseController
{
public array $validateMethodParams = [
'signIn' => [
'username' => 'required|alpha_dash:ascii|max:50',
'password' => 'required|alpha_dash:ascii|max:50',
'device' => 'required|alpha_dash:ascii|max:10',
],
];
function signIn(): \Illuminate\Http\JsonResponse
{
$request = request();
$username = $request->input('username');
$password = $request->input('password');
$device = $request->input('device');
$oCustomerUser = new CustomerUser();
$oUser = $oCustomerUser->findItemByUsername($username);
if (!$oUser) {
return $this->error('用户名不存在');
}
if (!$oCustomerUser->checkPasswd($oUser->id,$password)) {
return $this->error('密码错误');
}
$oAuthService = new AuthService();
$token = $oAuthService->createTokenToUser($oUser->id,$device);
$data = [
'token' => $token,
'user' => [
'id' => $oUser->id,
'username' => $oUser->username,
'nickname' => $oUser->nickname,
'is_google_auth' => $oUser->is_google_auth,
'created_at' => $oUser->created_at,
'updated_at' => $oUser->updated_at,
],
];
return $this->success($data);
}
function signOut(): \Illuminate\Http\JsonResponse
{
$oAuthService = new AuthService();
$token = $oAuthService->getTokenFromReq();
$aUser = $oAuthService->getCurrentUser();
$oAuthService->delTokenToUser($aUser['uid'],$token);
return $this->success();
}
function register()
{
$request = request();
$username = $request->input('username');
$password = $request->input('password');
$device = $request->input('device');
$oCustomerUser = new CustomerUser();
$oUser = $oCustomerUser->findItemByUsername($username,['id']);
if ($oUser) {
return $this->error('用户名已存在');
}
$oUser = $oCustomerUser->addUser([
'username' => $username,
'password' => $password,
'nickname' => $username,
]);
if (!$oUser) {
return $this->error('注册失败');
}
$oAuthService = new AuthService();
$token = $oAuthService->createTokenToUser($oUser->id,$device);
$data = [
'token' => $token,
'user' => [
'id' => $oUser->id,
'username' => $oUser->username,
'nickname' => $oUser->nickname,
'is_google_auth' => $oUser->is_google_auth,
'created_at' => $oUser->created_at,
'updated_at' => $oUser->updated_at,
],
];
return $this->success($data);
}
}

View File

@ -42,6 +42,7 @@ class Kernel extends HttpKernel
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\ReqRecordMiddleware::class,
],
];
@ -53,16 +54,18 @@ class Kernel extends HttpKernel
* @var array<string, class-string|string>
*/
protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// 'auth' => \App\Http\Middleware\Authenticate::class,
// 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
// 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
// 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
// 'can' => \Illuminate\Auth\Middleware\Authorize::class,
// 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
// 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
// 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
// 'signed' => \App\Http\Middleware\ValidateSignature::class,
// 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
// 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'auth' => \App\Http\Middleware\AuthMiddleware::class,
];
}

View File

@ -0,0 +1,44 @@
<?php
namespace App\Http\Middleware;
use App\Const\Responses;
use App\Service\AuthService;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Symfony\Component\HttpFoundation\Response;
class AuthMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
//检查是否登录并且将登录信息放在di中
$oAuthService = new AuthService();
$sToken = $oAuthService->getTokenFromReq($request);
$aUserInfo = $oAuthService->getUserInfoByToken($sToken);
if($aUserInfo == null){
return response()->json([
'code'=>Responses::CODE_ERROR,
'msg'=>'未登录',
]);
}
$oCustomerUser = new \App\Models\Customer\CustomerUser();
$oCustomerUser = $oCustomerUser->findUserByUidWithCache($aUserInfo['uid']);
if(empty($oCustomerUser)){
return response()->json([
'code'=>Responses::CODE_ERROR,
'msg'=>'用户不存在',
]);
}
$oAuthService->setCurrentUser($oCustomerUser->toArray());
return $next($request);
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace App\Http\Middleware;
use App\Const\Filter;
use App\Tools\Tools;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
class ReqRecordMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
//记录请求
$sReqId = \App\Tools\Tools::generateRandStr(16);
$sReqIp = $request->getClientIp();
$sReqUrl = $request->getUri();
$sReqMethod = $request->getMethod();
$sReqParams = json_encode($request->all());
$sReqTime = date('Y-m-d H:i:s');
$sReqUserAgent = $request->userAgent();
$sReqReferer = $request->headers->get('referer');
$sReqHeader = json_encode($request->headers->all());
$aData = [
'req_id'=>$sReqId,
'req_ip'=>$sReqIp,
'req_url'=>$sReqUrl,
'req_method'=>$sReqMethod,
'req_params'=>Tools::filterDataParams($sReqParams,Filter::REQ_LOG_FILTER),
'req_time'=>$sReqTime,
'req_user_agent'=>$sReqUserAgent,
'req_referer'=>$sReqReferer,
'req_header'=>$sReqHeader,
];
Log::info('req_record',$aData);
return $next($request);
}
}