Аутентификация
Аутентификация — это проверка того, кто пользователь. В Laravel для неё всё готово: модель User, таблица users и фасад Auth. Готовые страницы входа и регистрации даёт стартовый набор Laravel Breeze, но полезно понимать, как это устроено внутри.
Регистрация
Пароль никогда не хранят в открытом виде — его хешируют функцией Hash::make():
use App\Models\User;
use Illuminate\Support\Facades\Hash;
public function register(Request $request)
{
$data = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
]);
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
Auth::login($user);
return redirect('/profile');
}Вход
Метод Auth::attempt() ищет пользователя по почте и сверяет пароль с хешем:
use Illuminate\Support\Facades\Auth;
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect('/profile');
}
return back()->withErrors(['email' => 'Неверная почта или пароль.']);
}Текущий пользователь
$user = Auth::user(); // объект User или null
$id = Auth::id(); // идентификатор или null
$loggedIn = Auth::check(); // true, если пользователь вошёлВ шаблонах для этого есть директивы:
@auth
<p>Привет, {{ auth()->user()->name }}!</p>
@endauth
@guest
<a href="/login">Войти</a>
@endguestЗащита страниц
Посредник auth перенаправляет гостей на страницу входа:
Route::get('/profile', [ProfileController::class, 'show'])->middleware('auth');Выход
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}Выход делают формой с методом POST, а не ссылкой — иначе пользователя можно разлогинить с чужого сайта.
Частая ошибка
После успешного входа нужно вызвать $request->session()->regenerate(). Без этого идентификатор сессии остаётся прежним, и злоумышленник, заранее подсунувший жертве свой идентификатор, получит доступ к её аккаунту. Это называют фиксацией сессии.