Files
tehnobox/app/Http/Controllers/Shop/AuthController.php
ssww23 0ee9f05416
Some checks failed
Deploy / deploy (push) Has been cancelled
1
2026-03-17 01:59:00 +03:00

103 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers\Shop;
use App\Http\Controllers\Concerns\ManagesCaptcha;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rules\Password;
class AuthController extends Controller
{
use ManagesCaptcha;
private const LOGIN_CAPTCHA_CONTEXT = 'shop_login';
private const REGISTER_CAPTCHA_CONTEXT = 'shop_register';
public function showLoginForm(Request $request)
{
return view('shop.auth.login', [
'captchaQuestion' => $this->buildCaptchaQuestion($request, self::LOGIN_CAPTCHA_CONTEXT),
]);
}
public function login(Request $request)
{
$validated = $request->validate([
'email' => ['required', 'email'],
'password' => ['required', 'string'],
'captcha' => ['required', 'string', 'max:10'],
]);
if (!$this->captchaIsValid($request, self::LOGIN_CAPTCHA_CONTEXT)) {
return back()
->withInput($request->only('email', 'remember'))
->withErrors(['captcha' => __('Неверный ответ на капчу.')]);
}
$credentials = [
'email' => $validated['email'],
'password' => $validated['password'],
];
$remember = $request->boolean('remember');
if (!Auth::attempt($credentials, $remember)) {
return back()
->withInput($request->only('email', 'remember'))
->withErrors(['email' => __('Неверный email или пароль.')]);
}
$request->session()->regenerate();
$this->clearCaptcha($request, self::LOGIN_CAPTCHA_CONTEXT);
return redirect()->intended(route('account'));
}
public function showRegisterForm(Request $request)
{
return view('shop.auth.register', [
'captchaQuestion' => $this->buildCaptchaQuestion($request, self::REGISTER_CAPTCHA_CONTEXT),
]);
}
public function register(Request $request)
{
$validated = $request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', 'unique:users,email'],
'password' => ['required', 'confirmed', Password::defaults()],
'captcha' => ['required', 'string', 'max:10'],
]);
if (!$this->captchaIsValid($request, self::REGISTER_CAPTCHA_CONTEXT)) {
return back()
->withInput($request->only('name', 'email'))
->withErrors(['captcha' => __('Неверный ответ на капчу.')]);
}
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => $validated['password'],
]);
Auth::login($user);
$request->session()->regenerate();
$this->clearCaptcha($request, self::REGISTER_CAPTCHA_CONTEXT);
return redirect()->route('account');
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('home');
}
}