ldc-supportweb/app/Http/Controllers/Auth/AuthenticatedSessionController.php

157 lines
4.6 KiB
PHP

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Requests\Auth\ForgotPasswordRequest;
use App\Http\Requests\Auth\LoginRequest;
use App\Http\Requests\Auth\ResetPasswordRequest;
use App\Mails\Auth\ResetPassword;
use App\Models\User;
use App\Models\UserPassword;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Inertia\Inertia;
/**
* Manages backend authentication sessions (login/logout).
*/
class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Inertia\Response
*/
public function login(): \Inertia\Response
{
return Inertia::render('back/Pages/Auth/Login');
}
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function postLogin(LoginRequest $request): \Illuminate\Http\RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(route(config('uwil-backend.routes.name') . 'dashboard.index', absolute: false));
}
/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function logout(Request $request): \Illuminate\Http\RedirectResponse
{
Auth::guard('backend')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return to_route(config('uwil-backend.routes.name') . 'login');
}
/**
* Display the forgotten password view.
*
* @return \Inertia\Response
*/
public function forgotPassword(): \Inertia\Response
{
return Inertia::render('back/Pages/Auth/ForgotPassword');
}
/**
* Handle an incoming forgotten password request.
*
* @param \App\Http\Requests\Auth\ForgotPasswordRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function postForgotPassword(ForgotPasswordRequest $request): \Illuminate\Http\RedirectResponse
{
$status = Password::broker('backend')->sendResetLink(
$request->validated()
);
if ($status !== Password::RESET_LINK_SENT) {
Log::warning('Password reset link not sent', [
'status' => $status,
'email' => $request->input('email'),
]);
}
return to_route(config('uwil-backend.routes.name') . 'login');
}
/**
* Send a reset password link to the user.
*
* @param \App\Models\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function sendResetPasswordLink(User $user): \Illuminate\Http\RedirectResponse
{
$status = Password::broker('backend')->sendResetLink(['email' => $user->email]);
return $status === Password::RESET_LINK_SENT
? back()
: back()->withErrors(['email' => trans('auth.throttled')]);
}
/**
* Display the view.
*
* @param string $token
* @return \Inertia\Response
*/
public function resetPassword(string $token): \Inertia\Response
{
return Inertia::render('back/Pages/Auth/ResetPassword', [
'token' => $token,
'email' => request()->query('email', ''),
]);
}
/**
* Handle an incoming resetting password request.
*
* @param \App\Http\Requests\Auth\ResetPasswordRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function postResetPassword(ResetPasswordRequest $request): \Illuminate\Http\RedirectResponse
{
$status = Password::broker('backend')->reset(
$request->validated(),
function (User $user, string $password): void {
$user->setRememberToken(Str::random(60));
$user->save();
UserPassword::updateOrCreate(
['user_id' => $user->getKey()],
['password' => Hash::make($password)],
);
event(new PasswordReset($user));
Mail::send(new ResetPassword($user));
}
);
return $status === Password::PASSWORD_RESET
? to_route(config('uwil-backend.routes.name') . 'login')
: back()->withErrors(['email' => trans("auth.token")]);
}
}