Сторонний модуль входа в систему OAuth
Описание функции
Префикс интерфейса унифицирован как http(s)://<your-domain>
В производственных средах следует использовать HTTPS, чтобы гарантировать токены аутентификации. HTTP рекомендуется только для сред разработки.
Поддерживает несколько методов входа в систему OAuth, таких как GitHub, OIDC, LinuxDO, WeChat, Telegram и т. д. Внедряет защиту CSRF и управление сеансами, а также поддерживает привязку учетной записи и автоматическую регистрацию. Внешний интерфейс обрабатывает поток OAuth посредством перенаправления.
🔐 Аутентификация не требуется
GitHub OAuth переход
- Имя интерфейса: GitHub OAuth Jump.
- Метод HTTP: GET
- Путь:
/api/oauth/github - Требования аутентификации: общедоступно.
- Введение в функцию: обработка обратных вызовов GitHub OAuth для завершения входа пользователя или привязки учетной записи.
💡Пример запроса:
_// Передняя часть вызывается через перенаправление,обычно состоит изGitHub OAuthАвтоматический обратный звонок после авторизации _window.location.href = `https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`;✅ Пример успешного ответа:
{
"success": true,
"message": "Вход успешен",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "github_user",
"display_name": "GitHub User",
"email": "user@example.com"
}
}
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "Администратор не активировал пропуск GitHub Войдите и зарегистрируйтесь"
}🧾 Описание поля:
code(строка): код авторизации GitHub OAuth, предоставленный GitHub во время обратного вызова.code(строка): код состояния защиты от CSRF, должен соответствовать тому, что хранится в сеансе.
OIDC Универсальный переход по OAuth
- Имя интерфейса: переход OIDC Universal OAuth.
- Метод HTTP: GET
- Путь:
code - Требования аутентификации: общедоступно.
- Введение в функцию: обработка обратного вызова OIDC OAuth, поддержка универсального входа в систему по протоколу OpenID Connect.
💡Пример запроса:
_// Передняя часть вызывается через перенаправление _
const url = new URL(auth_url);
url.searchParams.set('client_id', client_id);
url.searchParams.set('redirect_uri', `${window.location.origin}/oauth/oidc`);
url.searchParams.set('response_type', 'code');
url.searchParams.set('scope', 'openid profile email');
url.searchParams.set('state', state);
window.location.href = url.toString();✅ Пример успешного ответа:
{
"success": true,
"message": "Вход успешен",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "oidc_user",
"email": "user@example.com"
}
}
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "OIDC Не удалось получить информацию о пользователе.!Пожалуйста, проверьте настройки!"
}🧾 Описание поля:
code(строка): код авторизации OIDC.code(строка): код состояния защиты от CSRF.
LinuxDo OAuth Jump
- Имя интерфейса: LinuxDo OAuth Jump.
- Метод HTTP: GET
- Путь:
code - Требования аутентификации: общедоступно.
- Введение в функцию: обработка обратного вызова LinuxDo OAuth, поддержка входа через учетную запись сообщества LinuxDo.
💡Пример запроса:
_// Передняя часть вызывается через перенаправление _
window.location.href = `https://connect.linux.do/oauth2/authorize?response_type=code&client_id=${linuxdo_client_id}&state=${state}`;✅ Пример успешного ответа:
{
"success": true,
"message": "Вход успешен",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "linuxdo_user",
"display_name": "LinuxDo User"
}
}
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "Администратор закрыл регистрацию нового пользователя"
}🧾 Описание поля:
code(строка): код авторизации LinuxDo OAuth.code(строка): код состояния защиты от CSRF.code(строка): необязательно, код ошибки OAuth.code(строка): необязательно, описание ошибки.
Переход к входу в систему с кодом сканирования WeChat
- Имя интерфейса: переход к входу в систему с кодом сканирования WeChat.
- Метод HTTP: GET
- Путь:
code - Требования аутентификации: общедоступно.
- Введение в функцию: обработка входа в систему с помощью сканированного кода WeChat и завершение процесса входа с помощью проверочного кода.
💡Пример запроса:
const response = await fetch(`/api/oauth/wechat?code=${wechat_verification_code}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "Вход успешен",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "wechat_user",
"wechat_id": "wechat_openid"
}
}
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "Код подтверждения недействителен или срок его действия истек."
}🧾 Описание поля:
code (строка): код подтверждения, полученный путем сканирования кода WeChat.
Привязка аккаунта WeChat
- Имя интерфейса: привязка учетной записи WeChat.
- Метод HTTP: GET
- Путь:
code - Требования аутентификации: общедоступно.
- Введение в функцию: привязка учетной записи WeChat к существующей учетной записи пользователя.
💡Пример запроса:
const response = await fetch(`/api/oauth/wechat/bind?code=${wechat_verification_code}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "Учетная запись WeChat успешно привязана!"
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "Код подтверждения недействителен или учетная запись WeChat привязана."
}🧾 Описание поля:
code (строка): код подтверждения, полученный путем сканирования кода WeChat.
Привязка электронной почты
- Имя интерфейса: привязка к электронной почте.
- Метод HTTP: GET
- Путь:
code - Требования аутентификации: общедоступно.
- Введение в функцию: привязка электронной почты к учетной записи пользователя с помощью кода подтверждения электронной почты.
💡Пример запроса:
const response = await fetch(`/api/oauth/email/bind?email=${email}&code=${email_verification_code}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "Учетная запись электронной почты успешно привязана!"
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "Код подтверждения недействителен или адрес электронной почты был использован."
}🧾 Описание поля:
email(строка): адрес электронной почты для привязки.email(строка): код подтверждения электронной почты.
Вход в Telegram
- Имя интерфейса: вход в Telegram.
- Метод HTTP: GET
- Путь:
email - Требования аутентификации: общедоступно.
- Введение в функцию: полный вход пользователя через виджет Telegram.
💡Пример запроса:
const params = {
id: telegram_user_id,
first_name: "John",
last_name: "Doe",
username: "johndoe",
photo_url: "https://...",
auth_date: 1640995200,
hash: "telegram_hash"
};
const query = new URLSearchParams(params).toString();
const response = await fetch(`/api/oauth/telegram/login?${query}`, {
method: 'GET'
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "Вход успешен",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "telegram_user",
"telegram_id": "123456789"
}
}
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "TelegramАутентификация не удалась"
}🧾 Описание поля:
id(строка): идентификатор пользователя Telegram.id(строка): имя пользователяid(строка): фамилия пользователя, необязательно.id(строка): имя пользователя Telegram, необязательно.id(строка): URL-адрес аватара, необязательно.id(число): временная метка аутентификации.id(Строка): хеш проверки Telegram.
Привязка аккаунта Telegram
- Имя интерфейса: привязка аккаунта Telegram.
- Метод HTTP: GET
- Путь:
id - Требования аутентификации: общедоступно.
- Введение в функцию: привязка учетной записи Telegram к существующей учетной записи пользователя.
💡Пример запроса:
// проходитьTelegramLoginButtonКомпонент автоматически обрабатывает параметры
// Формат параметра такой же, какTelegramВойти тот же
const response = await fetch('/api/oauth/telegram/bind', {
method: 'GET',
params: telegram_auth_params
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "TelegramПривязка аккаунта прошла успешно!"
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "ДолженTelegramАккаунт привязан"
}🧾 Описание поля:
Формат параметра такой же, как в интерфейсе входа в Telegram.
Получить случайное состояние (анти-CSRF)
- Имя интерфейса: получить случайное состояние.
- Метод HTTP: GET
- Путь:
/api/oauth/state - Требования аутентификации: общедоступно.
- Введение в функцию: генерация случайных параметров состояния для защиты CSRF в процессе OAuth.
💡Пример запроса:
let path = '/api/oauth/state';
let affCode = localStorage.getItem('aff');
if (affCode && affCode.length > 0) {
path += `?aff=${affCode}`;
}
const response = await fetch(path, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();✅ Пример успешного ответа:
{
"success": true,
"message": "",
"data": "random_state_string_12chars"
}❗ Пример реакции на ошибку:
{
"success": false,
"message": "генерироватьstateнеудача"
}🧾 Описание поля:
aff(строка): необязательный параметр кода рекомендации, используемый для записи источника пользователя.aff(строка): возвращается строка случайного состояния длиной 12 бит.