Options
Top level của auth
options trong nuxt.config.js
như sau:
{
auth: {
endpoints: object,
headers: object,
token: object,
refreshToken: object,
redirect: object,
cookie: object,
middleware: object,
rewriteRedirects: boolean,
routes: object,
debug: boolean,
plugins: string[],
useGlobalFetch: boolean,
useI18n: boolean,
}
}
headers
Object chứa các headers sẽ được gửi cùng với các request được tạo ra bởi $fetch
.
Option này sẽ hữu ích khi bạn cần gửi custom header trong mọi request, ví dụ như gửi client id, hoặc set content type.
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'max-age=604800',
}
endpoints
object chứa thông tin các endpoint cho việc authen.
baseUrl
endpoints: {
baseUrl: process.env.NUXT_PUBLIC_API_BASE_URL,
}
Base URL của API dùng cho authen.
login
endpoints: {
login: {
url: '/login',
method: 'POST',
property: '',
headers: undefined,
}
}
Object chứa thông tin của endpoint API login.
url
: Path của API login.method
: Phương thức của API login.property
: Tên thuộc tính chứa data response từ API.headers
: Các headers sẽ được gửi cùng với request login.
Ví dụ API login của bạn có object response như sau:
{
"data": {
"tokens": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
}
Thì bạn cần set property
là data.tokens
.
logout
endpoints: {
logout: {
url: '/logout',
method: 'DELETE',
headers: undefined
}
}
Object chứa thông tin của endpoint API logout.
url
: Path của API logout.method
: Phương thức của API logout.headers
: Các headers sẽ được gửi cùng với request logout.
refresh
endpoints: {
refresh: {
url: '/refresh_tokens',
method: 'POST',
property: '',
headers: undefined,
}
}
Object chứa thông tin của endpoint API refresh token.
url
: Path của API refresh token.method
: Phương thức của API refresh token.property
: Tên thuộc tính chứa data response từ API.headers
: Các headers sẽ được gửi cùng với request refresh token.
Ví dụ API refresh tokens của bạn có object response như sau:
{
"data": {
"tokens": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
}
Thì bạn cần set property
là data.tokens
.
user
endpoints: {
user: {
url: '/me',
method: 'GET',
property: '',
headers: undefined,
}
}
Object chứa thông tin của endpoint API fetch user info.
url
: Path của API fetch user info.method
: Phương thức của API fetch user info.property
: Tên thuộc tính chứa data response từ API.headers
: Các headers sẽ được gửi cùng với request fetch user info.
Ví dụ API fetch user info của bạn có object response như sau:
{
"data": {
"id": 1,
"name": "John Doe",
"email": "user@example.com"
}
}
Thì bạn cần set property
là data
.
token
token: {
headerName: 'Authorization',
type: 'Bearer',
property: 'token',
maxAge: 365 * 24 * 60 * 60, // 1 year
}
headerName
Tên header đính kèm access token khi gọi API.type
Tên loại token.property
Tên key của token dùng để đọc vào object response từ api login. Như trong ví dụ ở trên thìproperty
có giá trị làaccess_token
.maxAge
Set giá trịmax-age
cho access token. Nếu token là JWT thì maxAge sẽ được sử dụng để tính toán dựa trên thời gian hết hạn của token. Ngược lại, giá trịmaxAge
này hoặc optioncookie.maxAge
sẽ được sử dụng để tính toán thời gian hết hạn của token.
refreshToken
refreshToken: {
type: 'param',
paramName: 'token',
property: 'refresh_token',
maxAge: 365 * 24 * 60 * 60, // 1 year
}
type
mặc định có giá trị'param'
, đồng nghĩa với việc refresh token sẽ được gửi đi trong request body dưới dạng một prameter. Nếu bạn muốn gửi token dưới dạng header thì bạn có thể settype
của refresh token (ví dụBearer
).paramName
Tên của param khi gọi API refresh token.property
Tên key của token dùng để đọc vào object response từ api login & refresh token. Như trong ví dụ ở trên thìproperty
có giá trị làrefresh_token
.maxAge
Set giá trịmax-age
cho refresh token. Nếu token là JWT thì maxAge sẽ được sử dụng để tính toán dựa trên thời gian hết hạn của token. Ngược lại, giá trịmaxAge
này hoặc optioncookie.maxAge
sẽ được sử dụng để tính toán thời gian hết hạn của token.
TIP
Hiện tại module này yêu cầu API login và refresh token trả về cùng một property chứa refresh token.
cookie
cookie: {
ssl: false,
maxAge: 365 * 24 * 60 * 60, // 1 year
domain: '',
path: '/',
}
ssl
Settrue
to enableSecure
flag for cookies (khuyến khích sử dụng nếu có thể).maxAge
Set giá trịmax-age
cho cookies. Hãy đảm bảo giá trịmaxAge
lớn hơn hoặc bằng thời gian expires của access token và refresh token.domain
Tên domain của cookie.path
Đường dẫn của cookie.
middleware
middleware: {
global: true,
}
global
Set giá trịfalse
để tắt global middleware'auth'
.
redirect
redirect: {
login: '/login',
logout: '/',
home: '/',
}
login
Đường dẫn tới trang login. Khi truy cập trang có page metaauth = true
mà chưa login sẽ bị chuyển hướng đến trang này.logout
Đường dẫn tới trang sau khi logout.home
Đường dẫn tới trang sau khi login.rewriteRedirects
sẽ override đường dẫn này. Hoặc trong trường hợp người dùng đã login nhưng đang thực hiện truy cập đến các trang có page metaauth = 'guest'
(ví dụ trang login) thì sẽ bị chuyển hướng đến đường dẫn này.
rewriteRedirects
rewriteRedirects: boolean = true;
- Set
true
để bật chức năng chuyển hướng đến trang đã truy cập trước đó trước khi bị chuyển hướng đến trang login thay vì bị chuyển hướng đếnredirect.home
.
routes
Đăng ký các page authentication bao gồm login
và logout
. Mặc định các page này nằm ở đường dẫn /login
và /logout
. Bạn có thể đăng ký lại path cho các page này ở đây.
login
routes: {
login: {
name: 'login',
file: resolve(__dirname, './pages/login.vue'),
path: '/login',
}
}
name
Tên của route.file
Đường dẫn tới file page component.path
Đường dẫn trên URL.
logout
routes: {
logout: {
name: 'logout',
path: '/logout',
file: resolve(__dirname, './pages/logout.vue'),
}
}
name
Tên của route.file
Đường dẫn tới file page component.path
Đường dẫn trên URL.
debug
debug: boolean = false;
Set true
để bật chế độ debug, ở chế độ debug, các response từ API sẽ được log ra console.
plugins
plugins: string[] = [];
Nếu bạn có plugin nào cần sử dụng $auth
thì bạn có thể đăng ký ở đây.
useGlobalFetch
useGlobalFetch: boolean = true;
Mặc định module này sẽ setup các interceptors trên global $fetch
. Nếu bạn muốn tắt chức năng này thì bạn có thể set useGlobalFetch
là false
và sử dụng $fetch
instance của module thông qua $auth
.
const $auth = useNuxtApp();
const { $fetch } = $auth;
$fetch('https://example.com/api/users');
useI18n
useI18n: boolean = false;
Set useI18n = true
nếu bạn có tích hợp module nuxtjs/i18n trong dự án, khi đó các đường dẫn để redirect sẽ được tạo ra qua các composition useLocalePath
và useLocaleRoute
của i18n, giúp localize các đường dẫn khi redirect.