Autenticación de usuarios con sesiones
Autenticación de Laravel
php artisan make:auth
Dentro de routes/web.api se añadió el conjunto de rutas
Auth::routes();
las cuales se encuentran en detalle dentro de vendor/laravel/framework/src/Iluminate/Routing/Router.php dentro del método auth
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
Para poder personalizar algunos detalles, reemplazamos Auth::routes() por la lista, dentro del archivo web.api.
Añadir ruta para la que no se necesita estar autenticado
Route::get('/', function(){
return view('welcome');
})->middleware('guest');
CSRF Token
TokenMismatchException
if ($exception instanceof TokenMismatchException) {
return redirect()->back()->withInput($request->input());
}
Personalizar excepciones para formato web y para api
En el handler poder determinar cuando una petición viene desde el frontend:
private function isFrontend($request)
{
// if accepts html code and has web middleware is a frontend request
return $request->acceptsHtml() && collect($request->route()->middleware())->contains('web');
}
Utilizar isFrontend() en los demás métodos del handler
protected function unauthenticated($request, AuthenticationException $exception)
{
if($this->isFrontend($request))
{
return redirect()->guest('login'); // redirect to login if user is not authenticated
}
return $this->errorResponse("Unauthenticated", 401);
}
protected function convertValidationExceptionToResponse(ValidationException $e, $request)
{
$errors = $e->validator->errors()->getMessages();
if($this->isFrontend($request))
{
return $request->ajax() ? response()->json($errors, 422) : redirect()
->back()
->withInput($request->input())
->withErrors($errors);
}
return $this->errorResponse($errors, 422);
}
Last updated
Was this helpful?