Методы авторизации
SDK предоставляет полный набор методов для управления авторизацией и аутентификацией пользователей в вашем приложении.
Доступные методы
Все методы авторизации доступны через emdCloud.auth:
authorization()— проверка текущей сессииlogin()— вход по логину и паролюregister()— регистрация нового пользователяsocialLogin()— OAuth авторизация (VK, Yandex)exchangeOAuthToken()— обмен OAuth токена на auth tokenresetPassword()— восстановление пароляchangePassword()— смена пароляlogout()— выход из системы
authorization()
Проверяет текущую сессию пользователя и возвращает данные авторизованного пользователя.
Синтаксис
await emdCloud.auth.authorization();
Возвращаемое значение
- Успех: объект с данными пользователя и токеном
- Токен валиден, но сессия отсутствует:
null - Ошибка: выбрасывает исключение
Примеры
try {
const user = await emdCloud.auth.authorization();
if (user) {
console.log('Пользователь авторизован:', user.email);
console.log('Токен:', user.token);
} else {
console.log('Токен валиден, но сессия отсутствует');
}
} catch (error) {
console.error('Ошибка проверки авторизации:', error);
}
Использование
Этот метод полезен для проверки авторизации при загрузке приложения:
// При инициализации приложения
const savedToken = localStorage.getItem('auth_token');
if (savedToken) {
emdCloud.setAuthToken(savedToken);
const user = await emdCloud.auth.authorization();
if (user) {
// Пользователь авторизован, показываем приложение
showApp(user);
} else {
// Токен невалиден, показываем форму входа
showLoginForm();
}
}
login()
Авторизует пользователя по логину (email) и паролю.
Синтаксис
await emdCloud.auth.login({
login: string,
password: string
});
Параметры
| Параметр | Тип | Описание |
|---|---|---|
login | string | Email пользователя |
password | string | Пароль пользователя |
Возвращаемое значение
- Успех: объект с данными пользователя и токеном
- Ошибка: выбрасывает исключение (неверные учетные данные, ошибка сервера)
Примеры
try {
const user = await emdCloud.auth.login({
login: 'user@example.com',
password: 'myP@ssw0rd'
});
console.log('Успешная авторизация:', user.email);
// Токен автоматически сохраняется в SDK
// Сохраните токен для последующих сессий
localStorage.setItem('auth_token', user.token);
} catch (error) {
if (error.status === 401) {
console.error('Неверный email или пароль');
} else {
console.error('Ошибка входа:', error);
}
}
register()
Регистрирует нового пользователя в системе.
Синтаксис
await emdCloud.auth.register({
email: string,
password: string,
// дополнительные поля профиля (опционально)
});
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
email | string | ✅ | Email пользователя |
password | string | ✅ | Пароль (минимум 6 символов) |
name | string | ❌ | Имя пользователя |
phone | string | ❌ | Телефон |
| ...другие поля | any | ❌ | Кастомные поля профиля |
Примеры
try {
const user = await emdCloud.auth.register({
email: 'newuser@example.com',
password: 'SecureP@ss123',
name: 'Иван Иванов',
phone: '+79001234567'
});
console.log('Регистрация успешна:', user.email);
// Пользователь автоматически авторизован
localStorage.setItem('auth_token', user.token);
} catch (error) {
if (error.message.includes('already exists')) {
console.error('Пользователь с таким email уже существует');
} else {
console.error('Ошибка регистрации:', error);
}
}
socialLogin()
Инициирует процесс OAuth авторизации через социальные сети (VKontakte или Yandex).
Синтаксис
await emdCloud.auth.socialLogin({
provider: SocialProvider,
redirectUrl: string
});
Параметры
| Параметр | Тип | Описание |
|---|---|---|
provider | SocialProvider | SocialProvider.VK или SocialProvider.YANDEX |
redirectUrl | string | URL для возврата после авторизации |
Возвращаемое значение
Объект с URL для редиректа: { url: string }
Примеры
import { SocialProvider } from '@emd-cloud/sdk';
// Шаг 1: Инициируем OAuth авторизацию
try {
const response = await emdCloud.auth.socialLogin({
provider: SocialProvider.VK, // или SocialProvider.YANDEX
redirectUrl: 'https://myapp.com/auth/callback'
});
// Шаг 2: Перенаправляем пользователя на страницу авторизации
window.location.href = response.url;
} catch (error) {
console.error('Ошибка инициации OAuth:', error);
}
Полный процесс OAuth авторизации
// 1. На странице входа
async function loginWithVK() {
const response = await emdCloud.auth.socialLogin({
provider: SocialProvider.VK,
redirectUrl: window.location.origin + '/auth/callback'
});
window.location.href = response.url;
}
// 2. На странице callback (после возврата от провайдера)
async function handleOAuthCallback() {
// Получаем secret токен из URL параметров
const urlParams = new URLSearchParams(window.location.search);
const secret = urlParams.get('secret');
if (secret) {
try {
// Обмениваем secret на auth токен
const user = await emdCloud.auth.exchangeOAuthToken({ secret });
console.log('OAuth авторизация успешна:', user.email);
localStorage.setItem('auth_token', user.token);
// Перенаправляем в приложение
window.location.href = '/dashboard';
} catch (error) {
console.error('Ошибка обмена токена:', error);
}
}
}
exchangeOAuthToken()
Обменивает OAuth secret токен на токен авторизации и данные пользователя.
Синтаксис
await emdCloud.auth.exchangeOAuthToken({
secret: string
});
Параметры
| Параметр | Тип | Описание |
|---|---|---|
secret | string | Secret токен из OAuth callback URL |
Примеры
См. пример в разделе socialLogin()
resetPassword()
Отправляет письмо для восстановления пароля на указанный email.
Синтаксис
await emdCloud.auth.resetPassword({
email: string
});
Параметры
| Параметр | Тип | Описание |
|---|---|---|
email | string | Email пользователя |
Примеры
try {
await emdCloud.auth.resetPassword({
email: 'user@example.com'
});
console.log('Письмо для восстановления пароля отправлено');
} catch (error) {
console.error('Ошибка восстановления пароля:', error);
}
changePassword()
Изменяет пароль авторизованного пользователя.
Синтаксис
await emdCloud.auth.changePassword({
oldPassword: string,
newPassword: string
});
Параметры
| Параметр | Тип | Описание |
|---|---|---|
oldPassword | string | Текущий пароль |
newPassword | string | Новый пароль |
Примеры
try {
await emdCloud.auth.changePassword({
oldPassword: 'oldP@ss123',
newPassword: 'newSecureP@ss456'
});
console.log('Пароль успешно изменен');
} catch (error) {
if (error.status === 401) {
console.error('Неверный текущий пароль');
} else {
console.error('Ошибка смены пароля:', error);
}
}
logout()
Завершает сессию пользователя на сервере.
Синтаксис
await emdCloud.auth.logout();
Примеры
try {
await emdCloud.auth.logout();
// Очищаем локальное хранилище
localStorage.removeItem('auth_token');
emdCloud.setAuthToken('');
console.log('Выход выполнен успешно');
// Перенаправляем на страницу входа
window.location.href = '/login';
} catch (error) {
console.error('Ошибка выхода:', error);
}
Типы данных
User
Объект пользователя, возвращаемый методами авторизации:
interface User {
id: string;
email: string;
token: string;
name?: string;
phone?: string;
avatar?: string;
// другие кастомные поля профиля
}
SocialProvider
Enum с доступными OAuth провайдерами:
enum SocialProvider {
VK = 'vk',
YANDEX = 'yandex'
}
Best Practices
Хранение токенов
// ✅ Хорошо: используйте localStorage для веб-приложений
localStorage.setItem('auth_token', user.token);
// ✅ Хорошо: используйте secure storage для мобильных приложений
await SecureStore.setItemAsync('auth_token', user.token);
// ❌ Плохо: не храните токены в cookies без httpOnly флага
document.cookie = `token=${user.token}`; // Уязвимо для XSS
Проверка авторизации
// ✅ Хорошо: проверяйте авторизацию при загрузке приложения
async function initApp() {
const token = localStorage.getItem('auth_token');
if (token) {
emdCloud.setAuthToken(token);
try {
const user = await emdCloud.auth.authorization();
if (user) {
return user;
}
} catch (error) {
// Токен невалиден, очищаем
localStorage.removeItem('auth_token');
}
}
return null;
}
Обработка ошибок
// ✅ Хорошо: обрабатывайте различные типы ошибок
try {
await emdCloud.auth.login({ login, password });
} catch (error) {
switch (error.status) {
case 401:
showError('Неверный email или пароль');
break;
case 429:
showError('Слишком много попыток. Попробуйте позже');
break;
case 500:
showError('Ошибка сервера. Попробуйте позже');
break;
default:
showError('Произошла ошибка. Попробуйте еще раз');
}
}
Следующие шаги
- 💾 Узнайте о работе с базой данных
- 💡 Посмотрите примеры авторизации