45 lines
1.2 KiB
PHP
45 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Constants\Device;
|
|
use App\Endpoint\Api\Http\Requests\LoginRequest;
|
|
use App\Exceptions\BizException;
|
|
use App\Models\User;
|
|
use App\Services\CaptchaService;
|
|
|
|
class LoginController extends Controller
|
|
{
|
|
/**
|
|
* 登录
|
|
*
|
|
* @param \App\Endpoint\Api\Http\Requests\LoginRequest $request
|
|
* @param \App\Services\CaptchaService $captchaService
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function __invoke(LoginRequest $request, CaptchaService $captchaService)
|
|
{
|
|
$captchaService->validatePhrase(
|
|
(string) $request->input('captcha_key'),
|
|
(string) $request->input('captcha_phrase')
|
|
);
|
|
|
|
$user = User::where('phone', $request->input('phone'))->first();
|
|
|
|
if (! $user?->verifyPassword($request->input('password'))) {
|
|
throw new BizException(__('Incorrect account or password'));
|
|
}
|
|
|
|
$user->update([
|
|
'last_login_at' => now(),
|
|
'last_login_ip' => $request->realIp(),
|
|
]);
|
|
|
|
$user->tokens()->delete();
|
|
|
|
return response()->json(
|
|
$user->createDeviceToken(Device::UNIAPP)
|
|
);
|
|
}
|
|
}
|