nuxt-simple-auth v1.6.7
nuxt-simple-auth
nuxt-simple-auth é um módulo de autenticação para Nuxt 3, Ele é um pacote de código aberto, robusto e repleto de recursos, permitindo a validação de cookies e CSRF utilizando Laravel Passport.\ Além disso, oferece suporte a diversos parâmetros para cookies, tanto no login quanto na autenticação em duplo fator (2FA).\ Conta ainda com suporte à autenticação SSR, garantindo que o usuário permaneça autenticado tanto no cliente quanto no servidor.
Embora o pacote seja estável em termos de opções e comportamento, ainda há melhorias a serem implementadas e a possibilidade de alguns bugs.
Start
npx nuxi@latest module add nuxt-simple-authSetup
Installation
Adicione
nuxt-simple-authà seção de módulos donuxt.config.js.
Configuration
A configuração deve ser realizada no arquivo nuxt.config.js, adicionando a biblioteca à seção de módulos.
Na propriedade auth, a definição das strategies é obrigatória, enquanto as configurações de cookies e *
*CSRF são opcionais**.
Para autenticação, a propriedade endpoints.login exige o uso do Laravel Passport, que deve expor a
rota /oauth/token.
Documentação do Laravel Passport - Client Credentials Grant Tokens
Essa rota deve retornar uma resposta JSON contendo os seguintes atributos:
access_tokenrefresh_tokenexpires_in
Se optar por utilizar a autenticação 2FA, o pacote requer a configuração de endpoints.2fa, que exige que o *
*Laravel** exponha uma rota específica.
Essa rota deve retornar uma resposta JSON com os seguintes atributos:
access_tokenexpires_in
expires_in: Deve ser o número de segundos até que o token de acesso do 2FA expire.
Exemplo de implementação no Laravel para o controller da rota TwoFactorAuthController:
return response()->json([
'access_token' => $twoFactorAuth->token,
'expires_in' => $twoFactorAuth->expire_at->timestamp - now()->timestamp, // Número de segundos até a expiração.
]);Após a validação do 2FA, o token será automaticamente adicionado aos headers das requisições como um Bearer
Token, com o nome "2fa".
Isso permite que as APIs do Laravel validem a autenticação nas rotas protegidas.
Example
export default defineNuxtConfig({
modules: [
'nuxt-simple-auth'
],
auth: {
csrf: '/csrf-token',
cookie: {
options: {
httpOnly: true,
secure: true,
sameSite: 'Lax',
priority: 'high',
},
prefix: '__Secure-auth.'
},
strategies: {
local: {
redirect: {
logout: "/auth",
login: "/auth"
},
user: {
property: "profile",
},
endpoints: {
login: {url: "/oauth/token", method: "post", alias: "auth token"},
user: {url: "/api/profile", method: "get"},
"2fa": {url: "/api/send-token-2fa", method: "post"},
},
}
}
},
});A configuração da propriedade auth.csrf também é opcional. Nela, você pode definir o endpoint da
rota /csrf-token do Laravel, que é responsável por fornecer o CSRF Token. Isso melhora a segurança ao validar as
rotas protegidas que utilizam CSRF Token.
Exemplo de Implementação no Laravel
Definição da rota no web.php
Route::get('/csrf-token', function () {
return response()->json(['csrf_token' => csrf_token()])
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST')
->header('Access-Control-Allow-Headers', 'Content-Type, X-CSRF-TOKEN');
});Configuração do CORS (config/cors.php)
Adicione /csrf-cookie e /csrf-token às permissões de caminhos no CORS:
'paths' => ['api/*', 'csrf-cookie', 'csrf-token', 'oauth/*']Exceções de CSRF (app/Http/Middleware/VerifyCsrfToken.php)
Para garantir que o token seja validado corretamente nas rotas de API, adicione as exceções:
protected $except = [
'/api/*'
];Runtime Config
A configuração do runtimeConfig do Nuxt 3 também precisa ser ajustada para incluir um objeto secret.
Este objeto deve conter os nomes das suas strategies, e dentro de cada uma delas, as seguintes chaves são *
*obrigatórias**:
Exemplo de Configuração:
export default defineNuxtConfig({
runtimeConfig: {
secret: {
local: {
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
grant_type: 'password',
},
client: {
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
grant_type: 'authorization_code',
}
}
}
});Strategies
As configurações das strategies seguem a estrutura abaixo, iniciando com um nome de sua escolha para configurar o
pacote.
As opções disponíveis estão listadas, indicando quais são obrigatórias e quais são opcionais.
Configuration
redirect: Defines the pages for redirection. (Required)login: (Optional)logout: (Required)callback: (Optional)home: (Optional)
endpoints: Defines the API routes configured in Laravel. (Required)login: (Required)url: (Required)method: (Required)alias: (Optional)
user: Contains user data. (Required)url: (Required)method: (Required)
"2fa": (Optional)url: (Required)method: (Required)alias: (Optional)
logout: (Optional)alias: (Optional)
token: Name of the object returned from Laravel authentication. It is usually"access_token". (Required)user: Name of the object containing user data. (Required)
strategies: {
local: {
redirect: {
logout: "/auth",
login: "/auth"
},
token: {
property: "access_token",
},
user: {
property: "profile",
},
endpoints: {
login: {url: "/oauth/token", method: "post", alias: "auth token"},
user: {url: "/api/profile", method: "get"},
"2fa": {url: "/api/send-token-2fa", method: "post"},
},
},
client:{
redirect: {
logout: "/auth",
login: "/auth"
},
token: {
property: "access_token",
},
user: {
property: "profile",
},
endpoints: {
login: {url: "/oauth/token", method: "post"},
user: {url: "/api/profile", method: "get"},
"2fa": {url: "/api/send-token-2fa", method: "post"},
logout: {alias: 'logout client'}
},
}
}O 2FA é opcional, mas, se incluído em uma das "strategies", deve conter a URL e o método necessários para ativar o middleware "_2fa". Esse middleware não é global e pode ser utilizado seletivamente nas páginas do Nuxt.
definePageMeta({
middleware: ['auth', '_2fa']
});Cookie
| Option | Description |
|---|---|
| prefix | Default token prefix used in constructing a key for token storage. |
| options | Additional cookie options, passed to cookie. |
| path | Path where the cookie is visible. Default is /. |
| expires | Specifies the lifetime of the cookie in number of days or a specific date. Default is session-only. |
| maxAge | Specifies the number (in seconds) that will be the Max-Age value (preferably expired). |
| domain | Domain (and by extension subdomains) where the cookie is visible. Default is the domain and all subdomains. |
| secure | Defines whether the cookie requires a secure protocol (HTTPS). Default is false, should be set to true if possible. |
Notes:
- By default, the prefix on
localhostis set to"auth." __Secure-prefix: Cookies with names starting with__Secure-(dash is part of the prefix) must be set with the secure flag from a secure page (HTTPS).__Host-prefix: Cookies with names starting with__Host-must be set with the secure flag, must originate from a secure page (HTTPS), must not have a domain specified (and therefore are not sent to subdomains), and the path must be/.
cookie: {
options: {
httpOnly: true,
secure: true,
sameSite: 'Lax',
priority: 'high',
//maxAge: 24 * 60 * 60 * 1000,
},
prefix: '__Secure-auth.',
}Middlewares
O pacote nuxt-simple-auth disponibiliza dois middlewares: "auth" e "_2fa".
Eles não são globais e podem ser aplicados seletivamente às páginas do Nuxt.
- auth: Restringe o acesso a páginas protegidas, garantindo que o usuário esteja autenticado via Laravel Passport , tanto no cliente quanto no servidor (SSR).
- _2fa: Complementa a autenticação verificando os valores armazenados nos cookies e no sessionStorage para validar a autenticação de dois fatores (2FA), também funcionando no cliente e no servidor (SSR).
definePageMeta({
middleware: ['auth', '_2fa']
});Methods
| Método / Method | Descrição (PT) | Description (EN) |
|---|---|---|
loginWith(strategyName, ...args) | Define a estratégia atual e tenta realizar o login. Retorna uma Promise. | Sets the current strategy and attempts to log in. Returns a Promise. |
logout(strategyName) | Realiza o logout, garantindo a destruição dos cookies e do estado. | Logs out, ensuring the destruction of cookies and state. |
_2fa(strategyName, ...args) | Tenta validar o código de autenticação em dois fatores (2FA). Retorna uma Promise. | Attempts to validate the two-factor authentication (2FA) code. Returns a Promise. |
refreshToken(strategyName) | ||
$auth.headers.set(name, value) | Define um cabeçalho HTTP manualmente. | Sets an HTTP header manually. |
$auth.headers.get(name) | Obtém o valor de um cabeçalho HTTP. | Retrieves the value of an HTTP header. |
Usage Examples
loginWith
const {$auth} = useNuxtApp()
$auth.loginWith('local', data)
.then(response => {
// Logic after login
})logout
const {$auth} = useNuxtApp()
$auth.logout('local')_2fa
$auth._2fa('local', data).then(response => {
// Logic after 2FA validation
})Headers and Requests
$auth.headers.set('name', 'value') // Sets a header
$auth.headers.get('name') // Retrieves a header
const {data, pending, error, refresh} = useFetch(url, {
headers: $auth.headers,
})⚖️ License
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago