Перейти к основному содержимому

Методы авторизации

SDK предоставляет полный набор методов для управления авторизацией и аутентификацией пользователей в вашем приложении.

Доступные методы

Все методы авторизации доступны через emdCloud.auth:

  • authorization() — проверка текущей сессии
  • login() — вход по логину и паролю
  • register() — регистрация нового пользователя
  • socialLogin() — OAuth авторизация (VK, Yandex)
  • exchangeOAuthToken() — обмен OAuth токена на auth token
  • resetPassword() — восстановление пароля
  • 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
});

Параметры

ПараметрТипОписание
loginstringEmail пользователя
passwordstringПароль пользователя

Возвращаемое значение

  • Успех: объект с данными пользователя и токеном
  • Ошибка: выбрасывает исключение (неверные учетные данные, ошибка сервера)

Примеры

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,
// дополнительные поля профиля (опционально)
});

Параметры

ПараметрТипОбязательныйОписание
emailstringEmail пользователя
passwordstringПароль (минимум 6 символов)
namestringИмя пользователя
phonestringТелефон
...другие поля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
});

Параметры

ПараметрТипОписание
providerSocialProviderSocialProvider.VK или SocialProvider.YANDEX
redirectUrlstringURL для возврата после авторизации

Возвращаемое значение

Объект с 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
});

Параметры

ПараметрТипОписание
secretstringSecret токен из OAuth callback URL

Примеры

См. пример в разделе socialLogin()

resetPassword()

Отправляет письмо для восстановления пароля на указанный email.

Синтаксис

await emdCloud.auth.resetPassword({
email: string
});

Параметры

ПараметрТипОписание
emailstringEmail пользователя

Примеры

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
});

Параметры

ПараметрТипОписание
oldPasswordstringТекущий пароль
newPasswordstringНовый пароль

Примеры

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('Произошла ошибка. Попробуйте еще раз');
}
}

Следующие шаги

Полезные ссылки