7 Tips esenciales de Laravel Auth
Tags: laravel, php
Published: 2021-08-03 12:31:17

![https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4irnwb504wb1jkepcz61.jpg](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4irnwb504wb1jkepcz61.jpg)

**Laravel Auth** es el kit de autenticación de usuarios que nos proporciona el framework Laravel. Tal como especifica la documentación. Este módulo nos permite implementar de manera muy rápida la capa de autenticación de usuarios en nuestras aplicaciones webs.

## Tip 1. Cómo iniciar sesión con un usuario, si tenemos el ID o el objeto Usuario.

Para hacer este inicio de sesión utilizamos los siguientes métodos. 

[https://laravel.com/docs/8.x/authentication#other-authentication-methods](https://laravel.com/docs/8.x/authentication#other-authentication-methods)

```php
# Autenticación de Usuario por id.

Auth::loginUsingId(1);

# Autenticación de Usuario por Objeto Usuario.

Auth::login($user);

Auth::login($user, $remember = true);

# Con el helper auth()->login($user)

auth()->login($user);
```

## Tip 2. Cómo obtener el ID de un usuario autenticado.

Cuando es necesario interactuar con un usuario autenticado, obtener su información o simplemente su ID, utilizamos Auth Facade y el método Auth::user() o el helper auth().

```php
use Illuminate\Support\Facades\Auth;

// Retrieve the currently authenticated user...
$user = Auth::user();

// Retrieve the currently authenticated user's ID...
$id = Auth::id();

// También podemos utilizar el helper auth() y así no tenemos que instanciar
// el Facade de Auth, "Esta elección es a gusto de gustos del programador ;)"
auth()->user();
auth()->id();

```
## Tip 3. Cómo verificar un usuario autenticado en Blade.

Tenemos el legendario if(auth()→check()) que está muy bien hacerlo de esta manera en nuestro código. No obstante, te voy a dar una manera más corta que ofrece Laravel, que es simplemente "@auth y @endauth". Vamos al ejemplo: 

Primera vía, escribiendo if/else en Blade

```php
@if (auth()->check())

@else

@endif
```

Segunda vía, escribiendo auth

```php
@auth

@else

@endauth
```

## Tip 4. Implementar la verificación de email para nuevos usuarios registrados.

Muchas veces necesitamos que los usuarios verifiquen el correo electrónico con el que se registraron en el app, bien sea por razones de seguridad, o para estar seguros de que las comunicaciones que enviemos al usuario lleguen al buzón de correos de una cuenta existente. Laravel nos ofrece esta implementación haciendo solamente unos pequeños ajustes:

En el modelo User agregar la interfaz   `MustVerifyEmail`   y con esto, al registrar un nuevo usuario en nuestra app, le llegará un email de verificación. 

```php
class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    // ...
}
```

También, podemos proteger las rutas, para que solo tengan acceso aquellos usuarios que han sido verificados por email, utilizando el middleware `middleware('verified')`

```php
Route::get('/profile', function () {
    // Only verified users may access this route...
})->middleware('verified');
```

## Tip 5. Confirmación extra de contraseña.

En algunas ocasiones necesitamos poner una verificación de seguridad en alguna ruta. Por ejemplo, un usuario quiere modificar alguna información importante y queremos asegurarnos de que se trate de él. Para comprobar este paso, podemos volver a pedir su contraseña y Laravel tiene un middleware llamado `password.confirm` que realiza esta verificación. 

```php
Route::get('/settings', function () {
    // ...
})->middleware(['password.confirm']);

Route::post('/settings', function () {
    // ...
})->middleware(['password.confirm']);
```

## Tip 6. Cómo crear un usuario desde la consola de Tinker.

Trabajando con Laravel en algún momento, te encontrarás con la necesidad de crear un usuario sin utilizar el formulario de registro, más aun si estás escribiendo tests en tu aplicación. 

Si vamos al seeder de usuario encontraremos esta línea:

```php
\App\Models\User::factory(10)->create();
```

La cual invoca el `User::factory` y crea 10 usuarios con información ficticia al momento que ejecutemos los seeder de la base de datos.

Pero, si necesitamos crear uno y tal vez pasar alguna información que no queremos que sea falsa, por ejemplo: el email, podemos ejecutar directamente el `User::factory` desde la consola de Tinker y crearlo, como en el siguiente ejemplo: 

```php
User::factory()->create(['email' => 'test-2@mail.com'])
```

## Tip 7. Reforzando las validaciones de contraseñas.

A partir de **Laravel 8** tenemos disponible un objeto que permite modificar la complejidad de las contraseñas en nuestras aplicaciones. Además, puede asegurarnos de que la contraseña no se haya visto comprometida en fugas de datos:

Este objeto tiene los siguientes métodos:

```php
$request->validate([
    // Hace que la contraseña requiera al menos una letra mayúscula y una minúscula.
    'password' =>  ['required', 'confirmed', Password::min(8)->mixedCase()],

    // Hace que la contraseña requiera al menos una letra.
    'password' =>  ['required', 'confirmed', Password::min(8)->letters()],

    // Hace que la contraseña requiera al menos un número
    'password' =>  ['required', 'confirmed', Password::min(8)->numbers()],

    /// Hace que la contraseña requiera al menos un símbolo.
    'password' =>  ['required', 'confirmed', Password::min(8)->symbols()],

    // Garantiza que la contraseña no se haya visto comprometida en fugas de datos.
    'password' =>  ['required', 'confirmed', Password::min(8)->uncompromised()],
]);ara usarlo solo hay que agregar los métodos en en nuestras reglas de validaciones, por ejemplo:
```
Para implementarlo utilizamos estos métodos en las validaciones que están en los controladores, de la siguiente manera:

```php
public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => ['required', 'confirmed', Password::min(8)
                    ->mixedCase()
                    ->letters()
                    ->numbers()
                    ->symbols()
                    ->uncompromised(),
            ],
        ]);
```
¿Sabes otros interesantes tips sobre Laravel Auth? Compártelo en los comentarios.👨🏽‍💻 🙌🏼

Espero que pongas en práctica estos tips en tu proyectos. Nos vemos en un próximo post. 

Hasta la próxima coders!