✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Autenticação de aplicativo móvel usando token no Laravel

241

Você está usando o Laravel para o back-end do seu aplicativo móvel? Se sim, então provavelmente você está procurando uma solução fácil para a autenticação de seu aplicativo móvel. Muitos usuários podem estar usando seu aplicativo móvel e você deseja fazer autenticação para servir conteúdo aos usuários móveis. Neste artigo, estudamos como fazer autenticação baseada em tokens no Laravel. Você também pode usar a mesma abordagem para autenticação REST API.

Vamos integrar o Laravel Sanctum, que é um sistema de autenticação leve. Você pode considerá-lo um substituto para a autenticação baseada em OAuth.

Ao usar o Sanctum, os tokens de API do usuário são armazenados no banco de dados. Este token deve ser enviado como Bearertoken via Authorizationcabeçalho de seu aplicativo móvel para os endpoints da API Laravel. Esses tokens normalmente têm um tempo de expiração muito longo (anos).

Dito isso, vamos dar uma olhada em como usar o Sanctum para autenticar aplicativos móveis.

Instalar e configurar o Laravel Sanctum

Para começar, primeiro você precisa instalar um pacote Sanctum em seu aplicativo Laravel. Instale-o usando o comando:

composer require laravel/sanctum

Depois disso, publique os arquivos de configuração e migração do Sanctum executando o comando abaixo.

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

Em seguida, execute o comando de migração que criará uma personal_access_tokenstabela em seu banco de dados. Esta é a tabela onde todos os tokens de API serão armazenados.

php artisan migrate

Por padrão, cada solicitação no Laravel requer um token csrf. Em caso de falta deste token csrf, o Laravel não prossegue com o seu pedido. Quando se trata de gerar tokens de API usando Sanctum, precisamos pular o envio do token csrf. Para isso, adicione sanctum/tokenrota à $exceptvariável de app/Http/Middleware/VerifyCsrfToken.php. Vou criar essa sanctum/tokenrota nas próximas etapas.

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

Para fins de autenticação, precisamos emitir um token para os usuários. Portanto, você deve usar HasApiTokenstrait para o modelo de usuário da seguinte maneira.

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

Emissão de tokens de API para autenticação

Para enviar um token do portador com o cabeçalho de autorização em cada solicitação, é necessário primeiro emitir um token de API. Vou criar um método que gera um token de API para cada usuário. Para emitir um token, você deverá enviar o e-mail, a senha e o dispositivo de um usuário.

Adicione a rota abaixo no routes/web.php

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

Em seguida, crie um controlador APITokenControllerpelo comando:

php artisan make:controller APITokenController

Defina o create_token()método no controlador recém-criado da seguinte maneira.

<?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;
    }
}

O código acima verifica primeiro as credenciais do usuário. Se as credenciais estiverem corretas, ele enviará em resposta um token em formato de texto simples. Aqui, estou recebendo valores de entrada considerando que serão enviados em um objeto JSON.

Tente enviar uma solicitação POST com as credenciais do usuário e você deve receber o token de texto simples. Este token de API pode ser armazenado no dispositivo móvel e usado em um cabeçalho ao enviar solicitações de API.

No meu caso, eu uso a extensão Rest Client do código VS e minha solicitação sanctum/tokené conforme mostrado na imagem abaixo.

Vá até o banco de dados e você verá que seu token está armazenado na personal_access_tokenstabela.

O Sanctum criará vários tokens sempre que você atingir a sanctum/tokenrota com as credenciais corretas. Se você deseja revogar o token anterior, adicione a instrução abaixo antes da última instrução de retorno do código acima.

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

Finalmente, proteja as rotas adicionando o auth:sanctummiddleware da seguinte maneira.

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

O middleware valida se o token é recebido em um cabeçalho de autorização. Se o token da API estiver correto, apenas ele permitirá prosseguir para a rota.

Por exemplo, no código VS, você pode enviar o token de API como um token de portador com o cabeçalho de autorização, conforme mostrado abaixo.

Espero que você entenda como integrar a autenticação de aplicativos móveis usando um token no Laravel. Eu gostaria de ouvir seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação