Аутентификация
Kodzero SDK предоставляет полный набор методов для работы с аутентификацией пользователей.
Обзор
Модуль аутентификации доступен через kodzero.auth и поддерживает:
- Регистрацию новых пользователей
- Авторизацию по email и паролю
- Проверку токена
- Обновление токена
- Выход из системы
- Ручное управление токенами
Методы аутентификации
Регистрация
typescript
const result = await kodzero.auth.register({
email: 'user@example.com',
password: 'secure_password123',
name: 'Иван Иванов' // опционально
// ...другие поля
})Ответ:
typescript
{
user: {
_id: 'user_id',
email: 'user@example.com',
name: 'Иван Иванов',
workspace: 'workspace_id',
createdAt: '2024-01-01T00:00:00.000Z',
updatedAt: '2024-01-01T00:00:00.000Z'
},
tokens: {
access: 'access_token_string',
refresh: 'refresh_token_string'
},
session: 1234567890
}Автоматическое сохранение токенов
После успешной регистрации токены автоматически сохраняются в tokensManager и добавляются ко всем последующим запросам.
Авторизация
typescript
const result = await kodzero.auth.login({
email: 'user@example.com',
password: 'secure_password123'
})Ответ:
typescript
{
user: {
_id: 'user_id',
email: 'user@example.com',
name: 'Иван Иванов',
// ...
},
tokens: {
access: 'access_token_string',
refresh: 'refresh_token_string'
},
session: 1234567890
}Проверка токена
Проверяет валидность текущего access-токена:
typescript
const isValid = await kodzero.auth.verify()
if (isValid) {
console.log('Пользователь авторизован')
} else {
console.log('Токен недействителен')
}Примечание
Метод verify() возвращает false при любой ошибке, включая сетевые проблемы. Это поведение предотвращает ложные срабатывания.
Обновление токена
Обновляет access-токен с помощью refresh-токена:
typescript
const result = await kodzero.auth.refresh()
if (result.tokens) {
console.log('Токен успешно обновлён')
} else {
console.log('Не удалось обновить токен')
}Ответ при успехе:
typescript
{
tokens: {
access: 'new_access_token',
refresh: 'new_refresh_token'
}
}Ответ при ошибке:
typescript
{
tokens: null
}Выход из системы
typescript
const success = await kodzero.auth.logout()
if (success) {
console.log('Выход выполнен')
// Перенаправьте пользователя на страницу входа
}После успешного выхода токены автоматически очищаются.
Ручное управление токенами
Установка токенов
Полезно для восстановления сессии при перезагрузке страницы:
typescript
// Восстановление токенов из localStorage
const accessToken = localStorage.getItem('access_token')
const refreshToken = localStorage.getItem('refresh_token')
if (accessToken && refreshToken) {
kodzero.auth.setTokens(accessToken, refreshToken)
}Очистка токенов
typescript
kodzero.auth.clearTokens()Практические примеры
Персистентная авторизация
typescript
// При старте приложения
function initAuth() {
const accessToken = localStorage.getItem('kodzero_access')
const refreshToken = localStorage.getItem('kodzero_refresh')
if (accessToken && refreshToken) {
kodzero.auth.setTokens(accessToken, refreshToken)
}
}
// После успешной авторизации — сохраняем токены
async function login(email: string, password: string) {
const result = await kodzero.auth.login({ email, password })
localStorage.setItem('kodzero_access', result.tokens.access)
localStorage.setItem('kodzero_refresh', result.tokens.refresh)
return result
}
// При выходе — очищаем
async function logout() {
await kodzero.auth.logout()
localStorage.removeItem('kodzero_access')
localStorage.removeItem('kodzero_refresh')
}Автоматическое обновление токена
typescript
async function makeAuthenticatedRequest(requestFn: () => Promise<any>) {
try {
return await requestFn()
} catch (error) {
// Если токен истёк — пробуем обновить
if (error.statusCode === 401) {
const refreshResult = await kodzero.auth.refresh()
if (refreshResult.tokens) {
// Повторяем запрос с новым токеном
return await requestFn()
} else {
// Refresh токен тоже истёк — выходим
kodzero.auth.clearTokens()
throw new Error('Сессия истекла')
}
}
throw error
}
}React Hook для аутентификации
typescript
import { useState, useEffect, createContext, useContext } from 'react'
import { kodzero } from '@/services/kodzero'
interface AuthContextType {
user: any | null
isLoading: boolean
login: (email: string, password: string) => Promise<void>
logout: () => Promise<void>
}
const AuthContext = createContext<AuthContextType | null>(null)
export function AuthProvider({ children }) {
const [user, setUser] = useState(null)
const [isLoading, setIsLoading] = useState(true)
useEffect(() => {
// Проверяем сохранённые токены при старте
const accessToken = localStorage.getItem('kodzero_access')
const refreshToken = localStorage.getItem('kodzero_refresh')
if (accessToken && refreshToken) {
kodzero.auth.setTokens(accessToken, refreshToken)
kodzero.auth.verify().then(isValid => {
if (!isValid) {
localStorage.removeItem('kodzero_access')
localStorage.removeItem('kodzero_refresh')
}
setIsLoading(false)
})
} else {
setIsLoading(false)
}
}, [])
const login = async (email: string, password: string) => {
const result = await kodzero.auth.login({ email, password })
setUser(result.user)
localStorage.setItem('kodzero_access', result.tokens.access)
localStorage.setItem('kodzero_refresh', result.tokens.refresh)
}
const logout = async () => {
await kodzero.auth.logout()
setUser(null)
localStorage.removeItem('kodzero_access')
localStorage.removeItem('kodzero_refresh')
}
return (
<AuthContext.Provider value={{ user, isLoading, login, logout }}>
{children}
</AuthContext.Provider>
)
}
export const useAuth = () => useContext(AuthContext)Следующие шаги
- Модели данных — работа с коллекциями
- Обработка ошибок — обработка ошибок аутентификации