> For the complete documentation index, see [llms.txt](https://goauth.gitbook.io/goauth-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://goauth.gitbook.io/goauth-documentation/handling-callback.md).

# Callback и данные юзера

#### Получение данных юзера

После успешной авторизации юзер будет перенаправлен на ваш `redirect_url` с GET параметрами, содержащими данные профиля.

**Формат callback URL**

```
https://example.com/auth/callback?provider=google&provider_user_id=123...&email=user@example.com&name=Ivan+Petrov&hash=abc123...
```

**Параметры в callback**

| Параметр           | Тип    | Всегда присутствует | Описание                                        |
| ------------------ | ------ | ------------------- | ----------------------------------------------- |
| `provider`         | string | Да                  | Провайдер: `google`, `yandex`, `vk`, `telegram` |
| `provider_user_id` | string | Да                  | Уникальный ID юзера в системе провайдера        |
| `email`            | string | Нет                 | Email юзера (если провайдер предоставил)        |
| `name`             | string | Нет                 | Полное имя юзера                                |
| `first_name`       | string | Нет                 | Имя                                             |
| `last_name`        | string | Нет                 | Фамилия                                         |
| `username`         | string | Нет                 | Username (например, в Telegram)                 |
| `avatar`           | string | Нет                 | URL аватарки юзера                              |
| `hash`             | string | Да                  | HMAC подпись данных для проверки                |

**Проверка подлинности данных**

**Важно:** всегда проверяйте параметр `hash`, чтобы убедиться, что данные пришли от GoAuth, а не подделаны злоумышленником.

Алгоритм проверки:

1. Соберите данные для подписи в JSON:

```json
{
  "provider": "google",
  "provider_user_id": "123",
  "email": "user@example.com",
  "name": "Ivan Petrov",
  "first_name": "Ivan",
  "last_name": "Petrov"
}
```

2. Отсортируйте ключи по алфавиту
3. Посчитайте HMAC-SHA256 от этого JSON используя ваш `project_secret`
4. Сравните результат с полученным `hash`

Если hash совпадает — данные валидны.

**Создание сессии**

После проверки hash создайте сессию в вашем приложении:

1. Найдите или создайте юзера в вашей БД по `provider` + `provider_user_id`
2. Обновите данные профиля (email, name, avatar)
3. Создайте session token
4. Перенаправьте юзера в приложение

**Обработка ошибок**

Если авторизация не удалась, юзер не будет перенаправлен на ваш callback. GoAuth покажет страницу с ошибкой.
