feat: menric

This commit is contained in:
hashbro
2026-09-06 03:55:24 +08:00
parent f94def7c1f
commit d4c096ed4a
50 changed files with 1698 additions and 148 deletions
+20 -1
View File
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Agent;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Services\AdminGoogle2fa;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -31,12 +32,13 @@ class AuthController extends Controller
return view('user.shell');
}
public function login(Request $request): JsonResponse
public function login(Request $request, AdminGoogle2fa $google2fa): JsonResponse
{
try {
$credentials = $request->validate([
'username' => 'required|string|min:2|max:64',
'password' => 'required|string|max:128',
'GACode' => 'nullable|string|max:16',
], [
'username.required' => '请输入用户名',
'password.required' => '请输入密码',
@@ -75,6 +77,23 @@ class AuthController extends Controller
return response()->json(['code' => 1, 'msg' => '用户名或密码错误']);
}
/** @var User $user */
$user = Auth::guard('agent')->user();
if ($user->requiresLoginGoogle()) {
$code = (string) ($credentials['GACode'] ?? '');
if ($code === '') {
Auth::guard('agent')->logout();
return response()->json(['code' => 1, 'msg' => '请输入谷歌验证码!']);
}
if (! $google2fa->verify((string) $user->google_secret, $code)) {
Auth::guard('agent')->logout();
RateLimiter::hit($throttleKey, self::DECAY_SECONDS);
return response()->json(['code' => 1, 'msg' => '谷歌验证码不正确!']);
}
}
RateLimiter::clear($throttleKey);
$request->session()->regenerate();