Autenticação de aplicativo móvel usando token no Laravel
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 Bearer
token via Authorization
cabeç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_tokens
tabela 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/token
rota à $except
variável de app/Http/Middleware/VerifyCsrfToken.php
. Vou criar essa sanctum/token
rota 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 HasApiTokens
trait 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 APITokenController
pelo 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_tokens
tabela.
O Sanctum criará vários tokens sempre que você atingir a sanctum/token
rota 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:sanctum
middleware 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
- Como criar um blog com o Laravel
- Um guia para adicionar o Google reCAPTCHA v3 ao seu site Laravel
- Como fazer upload de vídeo no YouTube no aplicativo Laravel