1.6.1 • Published 6 months ago
@kyzmat/vue-auth v1.6.1
@kyzmat/vue-auth
Библиотека аутентификации OAuth для Vue 3 с поддержкой TypeScript
Установка
npm install @kyzmat/vue-authИспользование
1. Настройка в main.ts
import { createApp } from "vue";
import KyzmatAuth, { createAuthConfig } from "@kyzmat/vue-auth";
import App from "./App.vue";
const app = createApp(App);
app.use(KyzmatAuth, {
config: createAuthConfig({
baseUrl: "https://api.example.com",
endpoints: {
auth: "/auth/login",
token: "/auth/token",
user: "/auth/me",
refresh: "/auth/refresh",
},
storage: "cookies",
tokens: {
accessTokenExpiresIn: 7200,
refreshTokenExpiresIn: 2592000,
},
redirectParams: {
scope: "code",
redirectUrl: "https://app.example.com/callback",
clientId: "your-client-id",
state: "random-state-string",
},
})
);
app.mount("#app");Настройка хранилища
Вы можете настроить способ хранения токенов и данных пользователя. Доступны два варианта:
- Без префикса - данные хранятся напрямую:
{
storage: "localStorage",
tokens: {
accessTokenName: "token",
refreshTokenName: "refresh_token",
userName: "user"
}
}
// Результат в localStorage:
// token: "..."
// refresh_token: "..."
// user: "..."- С префиксом - данные хранятся в структурированном виде:
{
storage: "localStorage",
storagePrefix: "aic-auth",
tokens: {
accessTokenName: "token",
refreshTokenName: "refresh_token",
userName: "user"
}
}
// Результат в localStorage:
// aic-auth:token: "..."
// aic-auth:refresh_token: "..."
// aic-auth:user: "..."Настройка cookies
Если вы используете cookies для хранения, вы можете настроить дополнительные параметры:
{
storage: "cookies",
cookies: {
domain: ".example.com",
path: "/",
secure: true,
sameSite: "strict"
}
}2. Использование в компонентах
<script setup lang="ts">
import { useAuth, useToken, useUserState } from "@kyzmat/vue-auth";
// Хуки аутентификации
const { login, logout, isAuth, isLoading } = useAuth();
// Работа с токенами
const { token, refreshToken } = useToken();
// Работа с данными пользователя
const { user, setUser } = useUserState();
</script>
<template>
<div>
<!-- Использование готовой кнопки -->
<KyzmatButton label="Войти через OAuth" />
<!-- Или собственная кнопка -->
<button v-if="!isAuth" @click="login">Войти</button>
<button v-else @click="logout">Выйти</button>
<!-- Отображение данных пользователя -->
<div v-if="user">
<h2>Добро пожаловать, {{ user.name }}</h2>
</div>
</div>
</template>3. Защита маршрутов
import { createRouter, createWebHistory } from "vue-router";
import { isAuthenticated } from "@kyzmat/vue-auth";
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: "/protected",
component: ProtectedComponent,
meta: { requiresAuth: true },
},
],
});
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isAuthenticated()) {
next("/login");
} else {
next();
}
});Компоненты
KyzmatButton
<script setup lang="ts">
import { KyzmatButton } from "@kyzmat/vue-auth";
</script>
<template>
<KyzmatButton />
</template>Composables
useAuth
import { useAuth } from "@kyzmat/vue-auth";
const { login, logout, refresh, isAuth, isLoading, error } = useAuth();
// login - функция входа
// logout - функция выхода
// refresh - функция обновления токена
// isAuth - статус аутентификации
// isLoading - статус загрузки
// error - ошибка, если естьuseToken
import { useToken } from "@kyzmat/vue-auth";
const { token, refreshToken, saveTokens, clear } = useToken();
// token - текущий access токен
// refreshToken - текущий refresh токен
// saveTokens - функция сохранения токенов
// clear - функция очистки токеновuseUserState
import { useUserState } from "@kyzmat/vue-auth";
const { user, setUser, clearUser } = useUserState();
// user - данные пользователя
// setUser - функция установки данных пользователя
// clearUser - функция очистки данных пользователяAPI Справочник
Конфигурация
interface AuthConfig {
baseUrl: string; // backend link
authUrl: string; // idInfocom link
endpoints: {
login: string; // Путь для авторизации
token?: string; // Путь для получения токена
user?: string; // Путь для получения данных пользователя
refresh: string; // Путь для обновления токена
};
storage: "cookies" | "localStorage"; // Способ хранения токенов
tokens: {
accessTokenExpiresIn: number; // Время жизни access токена в секундах
refreshTokenExpiresIn: number; // Время жизни refresh токена в секундах
accessTokenName?: string; // Имя access токена
refreshTokenName?: string; // Имя refresh токена
};
redirectParams: {
scope: string; // Области доступа
redirectUrl: string; // URL для перенаправления
state: string; // Состояние для безопасности
clientId: string; // ID клиента
additionalParams?: Record<string, string>; // Дополнительные параметры
};
cookies?: {
domain?: string; // Домен для cookies
path?: string; // Путь для cookies
secure?: boolean; // Безопасные cookies
sameSite?: "strict" | "lax" | "none"; // Политика SameSite
};
}Возможности
- 🔒 Поддержка OAuth 2.0
- 🎯 Поддержка TypeScript
- 🍪 Хранение в cookies и localStorage
- 🔄 Автоматическое обновление токенов
- 👤 Управление состоянием пользователя
- 🛣️ Защита маршрутов
- 🎨 Гибкая конфигурация
Типы
import type { AuthConfig, User } from "@kyzmat/vue-auth";Лицензия
MIT
1.6.1
6 months ago
1.6.0
6 months ago
1.5.10
6 months ago
1.5.9
6 months ago
1.5.8
6 months ago
1.5.7
6 months ago
1.5.6
6 months ago
1.4.6
6 months ago
1.4.5
6 months ago
1.3.5
6 months ago
1.3.4
6 months ago
1.3.3
6 months ago
1.3.2
6 months ago
1.3.1
6 months ago
1.2.1
6 months ago
1.1.1
6 months ago
1.1.0
6 months ago
1.0.0
6 months ago