API RESTful con Laravel 5.4
  • Introduction
  • Homestead
  • Modelo
  • Migraciones
  • Seeders - Factories
  • Rutas
  • Traits - generalizar respuestas de la api
  • Controladores
  • Respuestas
  • Respuestas: Caché de resultados
  • Controladores para relaciones (operaciones complejas)
  • Imágenes
  • Correos
  • HATEOAS
  • Autenticación de usuarios con sesiones
  • OAuth 2
  • Access Tokens
  • Gestionar clientes usando Vue.js
  • Documentación con Swagger
Powered by GitBook
On this page
  • Autenticación de Laravel
  • CSRF Token
  • TokenMismatchException
  • Personalizar excepciones para formato web y para api

Was this helpful?

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);
}
PreviousHATEOASNextOAuth 2

Last updated 6 years ago

Was this helpful?