{"id":29116,"date":"2021-06-08T17:40:00","date_gmt":"2021-06-08T14:40:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29116"},"modified":"2021-10-17T16:24:44","modified_gmt":"2021-10-17T13:24:44","slug":"autenticacion-de-aplicaciones-moviles-usando-token-en-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/autenticacion-de-aplicaciones-moviles-usando-token-en-laravel\/","title":{"rendered":"Autenticaci\u00f3n de aplicaciones m\u00f3viles usando Token en Laravel"},"content":{"rendered":"<p>\u00bfEst\u00e1 utilizando Laravel para el back-end de su aplicaci\u00f3n m\u00f3vil? En caso afirmativo, probablemente est\u00e9 buscando una soluci\u00f3n sencilla para la autenticaci\u00f3n de su aplicaci\u00f3n m\u00f3vil. Muchos usuarios pueden estar usando su aplicaci\u00f3n m\u00f3vil y usted desea realizar la autenticaci\u00f3n para ofrecer contenido a sus usuarios m\u00f3viles. En este art\u00edculo, estudiamos c\u00f3mo realizar la autenticaci\u00f3n basada en tokens en Laravel. Tambi\u00e9n puede utilizar el mismo enfoque para la autenticaci\u00f3n de API REST.<\/p>\n<p>Vamos a integrar <a href=\"https:\/\/laravel.com\/docs\/master\/sanctum\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Sanctum,<\/a> que es un sistema de autenticaci\u00f3n ligero. Puede considerarlo como un reemplazo de la autenticaci\u00f3n basada en OAuth.<\/p>\n<p>Mientras usa Sanctum, los tokens API del usuario se almacenan en la base de datos. Este token debe enviarse como <code>Bearer<\/code>token a trav\u00e9s de un <code>Authorization<\/code>encabezado desde su aplicaci\u00f3n m\u00f3vil a los puntos finales de la API de Laravel. Estos tokens suelen tener un tiempo de caducidad muy largo (a\u00f1os).<\/p>\n<p>Dicho esto, echemos un vistazo a c\u00f3mo usar Sanctum para autenticar aplicaciones m\u00f3viles.<\/p>\n<h3>Instalar y configurar Laravel Sanctum<\/h3>\n<p>Para comenzar, primero debe instalar un paquete Sanctum en su aplicaci\u00f3n Laravel. Inst\u00e1lelo usando el comando:<\/p>\n<pre><code>composer require laravel\/sanctum<\/code><\/pre>\n<p>Despu\u00e9s de esto, publique los archivos de configuraci\u00f3n y migraci\u00f3n de Sanctum ejecutando el siguiente comando.<\/p>\n<pre><code>php artisan vendor:publish --provider=\"LaravelSanctumSanctumServiceProvider\"<\/code><\/pre>\n<p>A continuaci\u00f3n, ejecute el comando de migraci\u00f3n que crear\u00e1 una <code>personal_access_tokens<\/code>tabla en su base de datos. Esta es la tabla donde se almacenar\u00e1n todos los tokens de API.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>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\u00edo del token csrf. Para esto, agregue <code>sanctum\/token<\/code>ruta a la <code>$except<\/code>variable de <code>app\/Http\/Middleware\/VerifyCsrfToken.php<\/code>. Crear\u00e9 esta <code>sanctum\/token<\/code>ruta en los pr\u00f3ximos pasos.<\/p>\n<pre><code>&lt;?php\n...\nclass VerifyCsrfToken extends Middleware\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The URIs that should be excluded from CSRF verification.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $except = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'sanctum\/token'\n\u00a0\u00a0\u00a0\u00a0];\n}<\/code><\/pre>\n<p>Para fines de autenticaci\u00f3n, debemos emitir un token a los usuarios. Por lo tanto, debe usar el <code>HasApiTokens<\/code>rasgo para el modelo de usuario de la siguiente manera.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppModels;\n...\nuse LaravelSanctumHasApiTokens;\n\u00a0\nclass User extends Authenticatable\n{\n\u00a0\u00a0\u00a0\u00a0use HasApiTokens, HasFactory, Notifiable;\n\u00a0\u00a0\u00a0\u00a0...\n}<\/code><\/pre>\n<h3>Emisi\u00f3n de tokens de API para autenticaci\u00f3n<\/h3>\n<p>Para enviar un token de portador con el encabezado de autorizaci\u00f3n en cada solicitud, primero debe emitir un token de API. Voy a crear un m\u00e9todo que genere un token de API para cada usuario. Para emitir un token, se le pedir\u00e1 que env\u00ede el correo electr\u00f3nico, la contrase\u00f1a y el dispositivo de un usuario.<\/p>\n<p>Agregue la ruta siguiente en el <code>routes\/web.php<\/code><\/p>\n<pre><code>Route::post('\/sanctum\/token', 'APITokenController@create_token');<\/code><\/pre>\n<p>A continuaci\u00f3n, cree un controlador <code>APITokenController<\/code>con el comando:<\/p>\n<pre><code>php artisan make:controller APITokenController<\/code><\/pre>\n<p>Defina el <code>create_token()<\/code>m\u00e9todo en el controlador reci\u00e9n creado de la siguiente manera.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse AppModelsUser;\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesHash;\nuse IlluminateValidationValidationException;\n\u00a0\nclass APITokenController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function create_token(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;validate([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'required|email',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'required',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'device_name' =&gt; 'required',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = User::where('email', $request-&gt;input('email'))-&gt;first();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! $user ||! Hash::check($request-&gt;input('password'), $user-&gt;password)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'error' =&gt; 'The provided credentials are incorrect.'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $user-&gt;createToken($request-&gt;input('device_name'))-&gt;plainTextToken;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>El c\u00f3digo anterior primero verifica las credenciales del usuario. Si las credenciales son correctas, en respuesta env\u00eda un token en formato de texto sin formato. Aqu\u00ed, estoy recibiendo valores de entrada considerando que se enviar\u00e1n en un objeto JSON.<\/p>\n<p>Intente enviar una solicitud POST con las credenciales del usuario y deber\u00eda recibir el token de texto sin formato. Este token de API puede almacenarse en el dispositivo m\u00f3vil y usarse en un encabezado al enviar solicitudes de API.<\/p>\n<p>En mi caso, uso la <a href=\"https:\/\/themewp.inform.click\/es\/extension-de-cliente-rest-para-visual-studio-code\/\" title=\"extensi\u00f3n Rest Client del c\u00f3digo VS\">extensi\u00f3n Rest Client del c\u00f3digo VS<\/a> y mi solicitud <code>sanctum\/token<\/code>es como se muestra en la captura de pantalla a continuaci\u00f3n.<\/p>\n<p>Dir\u00edgete a la base de datos y deber\u00edas ver que tu token est\u00e1 almacenado en la <code>personal_access_tokens<\/code>tabla.<\/p>\n<p>Sanctum crear\u00e1 m\u00faltiples tokens cada vez que llegue a la <code>sanctum\/token<\/code>ruta con las credenciales correctas. Si desea revocar el token anterior, agregue la siguiente declaraci\u00f3n antes de la \u00faltima declaraci\u00f3n de devoluci\u00f3n del c\u00f3digo anterior.<\/p>\n<pre><code>\/\/ Revoke previous tokens...\n$user-&gt;tokens()-&gt;delete();\n\u00a0\nreturn $user-&gt;createToken($request-&gt;input('device_name'))-&gt;plainTextToken;<\/code><\/pre>\n<p>Finalmente, proteja las rutas agregando el <code>auth:sanctum<\/code>middleware de la siguiente manera.<\/p>\n<pre><code>Route::middleware('auth:sanctum')-&gt;get('\/products', function() {\n\u00a0\u00a0\u00a0\u00a0\/\/ write a code\n});<\/code><\/pre>\n<p>El middleware valida si el token se recibe en un encabezado de autorizaci\u00f3n. Si el token de la API es correcto, solo permite continuar con la ruta.<\/p>\n<p>Como ejemplo, en el c\u00f3digo VS puede enviar el token de API como un token de portador con el encabezado de Autorizaci\u00f3n como se muestra a continuaci\u00f3n.<\/p>\n<p>Espero que comprenda c\u00f3mo integrar la autenticaci\u00f3n de aplicaciones m\u00f3viles usando un token en Laravel. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-crear-un-blog-con-laravel\/\" title=\"C\u00f3mo crear un blog con Laravel\">C\u00f3mo crear un blog con Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/una-guia-para-agregar-google-recaptcha-v3-a-su-sitio-web-de-laravel\/\" title=\"Una gu\u00eda para agregar Google reCAPTCHA v3 a su sitio web de Laravel\">Una gu\u00eda para agregar Google reCAPTCHA v3 a su sitio web de Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-cargar-videos-en-youtube-en-la-aplicacion-laravel\/\" title=\"C\u00f3mo cargar videos en YouTube en la aplicaci\u00f3n Laravel\">C\u00f3mo cargar videos en YouTube en la aplicaci\u00f3n Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este tutorial, estudiamos c\u00f3mo integrar la autenticaci\u00f3n de aplicaciones m\u00f3viles utilizando Laravel como backend. Laravel Sanctum es un paquete que<\/p>\n","protected":false},"author":1,"featured_media":21639,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[495],"tags":[849],"class_list":["post-29116","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29116"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29116\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21639"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}