✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Autenticación de aplicaciones móviles usando Token en Laravel

339

¿Está utilizando Laravel para el back-end de su aplicación móvil? En caso afirmativo, probablemente esté buscando una solución sencilla para la autenticación de su aplicación móvil. Muchos usuarios pueden estar usando su aplicación móvil y usted desea realizar la autenticación para ofrecer contenido a sus usuarios móviles. En este artículo, estudiamos cómo realizar la autenticación basada en tokens en Laravel. También puede utilizar el mismo enfoque para la autenticación de API REST.

Vamos a integrar Laravel Sanctum, que es un sistema de autenticación ligero. Puede considerarlo como un reemplazo de la autenticación basada en OAuth.

Mientras usa Sanctum, los tokens API del usuario se almacenan en la base de datos. Este token debe enviarse como Bearertoken a través de un Authorizationencabezado desde su aplicación móvil a los puntos finales de la API de Laravel. Estos tokens suelen tener un tiempo de caducidad muy largo (años).

Dicho esto, echemos un vistazo a cómo usar Sanctum para autenticar aplicaciones móviles.

Instalar y configurar Laravel Sanctum

Para comenzar, primero debe instalar un paquete Sanctum en su aplicación Laravel. Instálelo usando el comando:

composer require laravel/sanctum

Después de esto, publique los archivos de configuración y migración de Sanctum ejecutando el siguiente comando.

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

A continuación, ejecute el comando de migración que creará una personal_access_tokenstabla en su base de datos. Esta es la tabla donde se almacenarán todos los tokens de API.

php artisan migrate

De forma predeterminada, cada solicitud en Laravel requiere un token csrf. En caso de perder este token csrf, Laravel no procede con su solicitud. Cuando se trata de generar tokens API usando Sanctum, debemos omitir el envío del token csrf. Para esto, agregue sanctum/tokenruta a la $exceptvariable de app/Http/Middleware/VerifyCsrfToken.php. Crearé esta sanctum/tokenruta en los próximos pasos.

<?php
...
class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'sanctum/token'
    ];
}

Para fines de autenticación, debemos emitir un token a los usuarios. Por lo tanto, debe usar el HasApiTokensrasgo para el modelo de usuario de la siguiente manera.

<?php
 
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
 
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    ...
}

Emisión de tokens de API para autenticación

Para enviar un token de portador con el encabezado de autorización en cada solicitud, primero debe emitir un token de API. Voy a crear un método que genere un token de API para cada usuario. Para emitir un token, se le pedirá que envíe el correo electrónico, la contraseña y el dispositivo de un usuario.

Agregue la ruta siguiente en el routes/web.php

Route::post('/sanctum/token', 'APITokenController@create_token');

A continuación, cree un controlador APITokenControllercon el comando:

php artisan make:controller APITokenController

Defina el create_token()método en el controlador recién creado de la siguiente manera.

<?php
 
namespace AppHttpControllers;
 
use AppModelsUser;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHash;
use IlluminateValidationValidationException;
 
class APITokenController extends Controller
{
    public function create_token(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required',
            'device_name' => 'required',
        ]);
     
        $user = User::where('email', $request->input('email'))->first();
 
        if (! $user ||! Hash::check($request->input('password'), $user->password)) {
            return [
                'error' => 'The provided credentials are incorrect.'
            ];
        }
     
        return $user->createToken($request->input('device_name'))->plainTextToken;
    }
}

El código anterior primero verifica las credenciales del usuario. Si las credenciales son correctas, en respuesta envía un token en formato de texto sin formato. Aquí, estoy recibiendo valores de entrada considerando que se enviarán en un objeto JSON.

Intente enviar una solicitud POST con las credenciales del usuario y debería recibir el token de texto sin formato. Este token de API puede almacenarse en el dispositivo móvil y usarse en un encabezado al enviar solicitudes de API.

En mi caso, uso la extensión Rest Client del código VS y mi solicitud sanctum/tokenes como se muestra en la captura de pantalla a continuación.

Dirígete a la base de datos y deberías ver que tu token está almacenado en la personal_access_tokenstabla.

Sanctum creará múltiples tokens cada vez que llegue a la sanctum/tokenruta con las credenciales correctas. Si desea revocar el token anterior, agregue la siguiente declaración antes de la última declaración de devolución del código anterior.

// Revoke previous tokens...
$user->tokens()->delete();
 
return $user->createToken($request->input('device_name'))->plainTextToken;

Finalmente, proteja las rutas agregando el auth:sanctummiddleware de la siguiente manera.

Route::middleware('auth:sanctum')->get('/products', function() {
    // write a code
});

El middleware valida si el token se recibe en un encabezado de autorización. Si el token de la API es correcto, solo permite continuar con la ruta.

Como ejemplo, en el código VS puede enviar el token de API como un token de portador con el encabezado de Autorización como se muestra a continuación.

Espero que comprenda cómo integrar la autenticación de aplicaciones móviles usando un token en Laravel. Me gustaría escuchar sus pensamientos y sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More