Autenticación de aplicaciones móviles usando Token en Laravel
¿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 Bearer
token a través de un Authorization
encabezado 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_tokens
tabla 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/token
ruta a la $except
variable de app/Http/Middleware/VerifyCsrfToken.php
. Crearé esta sanctum/token
ruta 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 HasApiTokens
rasgo 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 APITokenController
con 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/token
es 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_tokens
tabla.
Sanctum creará múltiples tokens cada vez que llegue a la sanctum/token
ruta 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:sanctum
middleware 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
- Cómo crear un blog con Laravel
- Una guía para agregar Google reCAPTCHA v3 a su sitio web de Laravel
- Cómo cargar videos en YouTube en la aplicación Laravel