RegosOAuthSDK — это легковесная JavaScript-библиотека для простой интеграции кнопки "Войти через REGOS" на ваш сайт или приложение с использованием OAuth 2.0 и OpenID Connect. После успешной авторизации пользователя кнопка автоматически заменяется круглым аватаром с выпадающим меню, содержащим информацию о профиле и опции управления.
Библиотека обеспечивает безопасный процесс авторизации, включая проверку существующих токенов при загрузке страницы. Если токены валидны, сразу отображается профиль пользователя без необходимости повторного входа.
Возможности библиотеки
Важно: Зарегистрируйте приложение в REGOS для получения clientId. Redirect URI должен совпадать с зарегистрированным.
Сервер использует scopes, указанные при регистрации клиента.
Внешний вид блока авторизации
Пример темной кнопки:
Пример светлой кнопки:
Отображение профиля после успешной авторизации:
Подключите библиотеку через CDN:
<script src="https://auth.regos.uz/widget/regos-oauth-sdk.js"></script>
Создайте контейнер для кнопки:
Добавьте <div>
с уникальным ID (по умолчанию "regos-login").
<div id="regos-login"></div>
Настройте страницу перенаправления (redirect URI):
Создайте файл (например, redirect.html) для обработки ответа в попап/iframe. Эта страница отправляет код авторизации обратно в основное окно и закрывается.
<!DOCTYPE html>
<html lang="ru">
<head>
<title>REGOS Redirect</title>
</head>
<body>
<script src="https://auth.regos.uz/widget/regos-redirect.js"></script>
</body>
</html>
Объяснение: regos-redirect.js парсит параметры URL (code, state, error), отправляет их через postMessage в родительское окно (или сохраняет в localStorage для redirect-flow) и перенаправляет на сохранённый returnUrl.
Инициализируйте SDK с помощью RegosOAuthSDK.initialize(config). Метод возвращает Promise, который разрешается после инициализации (без возвращаемых методов, так как все управление через callbacks и автоматическое).
При инициализации автоматически проверяются токены: если валидны, отображается профиль и вызывается onData(user, access_token); если silent: true — пытается тихая авторизация.
Пример базовой инициализации:
RegosOAuthSDK.initialize({
clientId: 'regos_983436cgv2536fqvsac5623d78232dxfs',
redirectUri: 'https://example.com/oauth/redirect.html',
language: 'ru',
buttonSize: 'm',
buttonTheme: 'light',
silent: false,
buttonBorderRadius: 6,
onData: (user, access_token) => {
if (user) {
console.log(`Пользователь авторизован: ${JSON.stringify(user)}`);
console.log(`Access token: ${access_token}`);
} else {
console.log('Авторизация утрачена');
}
},
onLogout: () => {
console.log('Выход выполнен');
},
onError: (err) => {
console.error(`Ошибка: ${err.message}`);
},
debug: false
})
.catch(err => console.error('Инициализация не удалась:', err));
Объяснение: Если токены уже есть и валидны, профиль отображается сразу, и вызывается onData с данными. Авторизация использует popup или redirect в зависимости от flow ('auto' — автоопределение по устройству).
Для удобной визуальной кастомизации кнопки "Войти через REGOS" без написания кода используйте онлайн-конструктор, доступный по адресу: https://docs.regos.uz/ru/sso/sso-button/constructor.
Параметр | Тип | Обязательно | Описание |
---|---|---|---|
clientId | string | Да | ID приложения из REGOS. |
redirectUri | string | Да | URL страницы перенаправления (должен быть зарегистрирован в REGOS). |
containerId | string | Нет | ID контейнера для кнопки/профиля (по умолчанию 'regos-login'). |
buttonSize | string | Нет | Размер кнопки: 's', 'm' (по умолчанию), 'l'. |
buttonTheme | string | Нет | Тема: 'light' (по умолчанию), 'dark'. |
buttonBorderRadius | number | Нет | Радиус скругления кнопки (число в пикселях, по умолчанию 4). |
buttonType | string | Нет | Тип кнопки: 'text' (только текст), 'icon-text' (иконка + текст, по умолчанию), 'icon' (только иконка). |
buttonTextType | string | Нет | Тип текста кнопки: 'full' (полный текст, по умолчанию), 'short' (короткий текст). |
language | string | Нет | Язык: 'ru' (по умолчанию), 'en', 'uz'. |
flow | string | Нет | Тип потока авторизации: 'auto' (автоопределение popup/redirect, по умолчанию), 'redirect' (всегда redirect). |
onData | function | Да | Callback для данных: получает объект пользователя (user) и access_token; null, null при потере авторизации. |
onLogout | function | Нет | Callback после выхода (локального). |
onError | function | Нет | Callback для ошибок (по умолчанию console.error). |
silent | boolean | Нет | Включить тихую авторизацию при инициализации (по умолчанию false). |
debug | boolean | Нет | Включить debug-логи в консоль (по умолчанию false). |
onData(user, access_token): Основной callback SDK, вызывается для уведомления о статусе авторизации.
user
: Объект профиля пользователя (из /userinfo) или null, если авторизация утрачена.access_token
: Строка с токеном доступа или null.onData: (user, access_token) => {
if (user) {
// Обновить UI с данными пользователя
console.log('Авторизован:', user, access_token);
} else {
// Показать кнопку входа или редирект на login
console.log('Не авторизован');
}
}
onLogout(): Callback после локального выхода.
onLogout: () => {
console.log('Пользователь вышел');
// Дополнительные действия: редирект, очистка состояния
}
onError(error): Callback для обработки ошибок.
error
: Объект Error с описанием (message).onError: (err) => {
alert(`Ошибка: ${err.message}`);
}
Внешний вид кнопки и аватара: Кнопка рендерится с иконкой (опционально), текстом (в зависимости от buttonType и buttonTextType), применяются классы для темы и размера. Аватар — круглый элемент с изображением или инициалами, клик toggles меню.
Тихая авторизация позволяет автоматически войти пользователя без попапа/redirect, если сессия REGOS активна. Реализовано через скрытый iframe с prompt=none.
Пример с silent:
RegosOAuthSDK.initialize({
clientId: 'your_client_id',
redirectUri: 'https://your-site.com/redirect.html',
silent: true,
debug: true,
onData: (user, token) => console.log(user ? 'Silent success' : 'Silent failed')
})
.catch(err => console.error('Silent auth ошибка:', err));
Все ошибки важно обрабатывать в onError и catch блоках.
Пример обработки:
onError: (err) => alert(`Ошибка авторизации: ${err.message}`)
Vanilla JS с кастомизацией
<!DOCTYPE html>
<html lang="ru">
<head>
<title>REGOS Login</title>
</head>
<body>
<div id="regos-login"></div>
<script src="https://auth.regos.uz/widget/regos-oauth-sdk.js"></script>
<script>
RegosOAuthSDK.initialize({
clientId: 'your_client_id',
redirectUri: 'redirect.html',
buttonSize: 'l',
buttonType: 'icon-text',
buttonTextType: 'short',
buttonBorderRadius: 14,
language: 'en',
flow: 'auto',
silent: true,
onData: (user, token) => console.log(user, token)
});
</script>
</body>
</html>
Интеграция в React
// React example
useEffect(() => {
RegosOAuthSDK.initialize({ /* config */ })
.catch(err => console.error(err));
}, []);
Пример с buttonType
buttonType: "icon-text", // варианты: "text", "icon-text", "icon"