# Вход через социальные сети

# Процесс авторизации

Для авторизации через социальные сети вы можете использовать **БЕСПЛАТНОЕ** решение от Auth4App, интеграция максимально упрощает использование социальных сетей в вашем приложении или на сайте.

##### Поддерживаемые соц. сети

<table border="1" id="bkmrk-yandex-vk-google-%D0%94%D0%BE%D0%BF" style="border-collapse: collapse; width: 100%; height: 298.39px;"><colgroup><col style="width: 33.3731%;"></col><col style="width: 33.3731%;"></col><col style="width: 33.3731%;"></col></colgroup><tbody><tr style="height: 119.398px;"><td class="align-center" style="height: 119.398px;">[![ya.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/ya.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/ya.png)</td><td class="align-center" style="height: 119.398px;">[![vk.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/vk.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/vk.png)</td><td class="align-center" style="height: 119.398px;">[![google.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/google.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/google.png)</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">**yandex**</td><td class="align-center" style="height: 29.7969px;">**vk**</td><td class="align-center" style="height: 29.7969px;">**google**</td></tr><tr style="height: 119.398px;"><td class="align-center" style="height: 119.398px;">[![ok.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/ok.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/ok.png)</td><td class="align-center" style="height: 119.398px;">[![mail.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/mail.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/mail.png)</td><td class="align-center" style="height: 119.398px;">Дополнительные соц. сети может добавить по запросу.</td></tr><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">**ok**</td><td class="align-center" style="height: 29.7969px;">**mailru**</td><td class="align-center" style="height: 29.7969px;">  
</td></tr></tbody></table>

##### **Процесс авторизации**

Для авторизации через соц. сети следует вызвать ссылку вида

```
https://api.auth4app.com/auth?soc={КЛЮЧ СОЦ. СЕТИ}&key={ВАШ УНИКАЛЬНЫЙ КЛЮЧ}
```

Где soc это ключ социальной сети из таблицы выше, а уникальный ключ (минимум 256 символов) это уникальный ключ, по которому можно будет получить результат авторизации.

После успешной авторизации произойдет переход на страницу:   
**[https://api.auth4app.com/callback/success](https://api.auth4app.com/callback/success)** Которая будет автоматически закрыта

[![Снимок экрана 2024-05-18 в 03.26.15.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/snimok-ekrana-2024-05-18-v-03-26-15.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/snimok-ekrana-2024-05-18-v-03-26-15.png)

Если авторизация была отменена или прошла с ошибкой то будет переход на страницу:  
**[https://api.auth4app.com/callback/error](https://api.auth4app.com/callback/error)**  
Которая будет автоматически закрыта

[![Снимок экрана 2024-05-18 в 03.26.23.png](https://support.auth4app.com/uploads/images/gallery/2024-05/scaled-1680-/snimok-ekrana-2024-05-18-v-03-26-23.png)](https://support.auth4app.com/uploads/images/gallery/2024-05/snimok-ekrana-2024-05-18-v-03-26-23.png)

##### Получение результат авторизации

```
https://api.auth4app.com/hash?key={ВАШ УНИКАЛЬНЫЙ КЛЮЧ}
```

Сделав запрос с ключом авторизации который вы создавали для ссылки авторизации вы получите резаультат авторизации. А сам ключ действителен 1 минуту после авторизации.

**Ответ в случае если авторизация прошла с ошибкой или не была пройдена:**

```json
{
"type": "error",
"data": [ ]
}
```

**Успешная авторизация:**

```
{
 "type": "success",
 "data": {
    "id": "406873ad05c4285______79a95da33a9a124d3",
    "profile_id:: "11254______6136911",
    "type": "google",
    "mail": "mail@gmail.com",
    "name": "Ivan",
    "surname": "Ivanov",
     "photo": "https://lh3.googleusercontent.com/a/ACg8________j=s96-c",
     "userInfo": {
        "id": "1125_______36911",
        "email": "mail@gmail.com",
        "verified_email": true,
        "name": "Ivan Ivanov",
        "given_name": "Ivan",
        "family_name": "Ivanov",
        "picture": "https://lh3.googleusercontent.com/a/ACg8o______=s96-c",
        "locale": "ru"
               },
       }
}
```

Описание полей ответа:

<table border="1" id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-id-%D0%A3%D0%BD%D0%B8" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>Поле</td><td>Описание</td></tr><tr><td>id</td><td>Уникальный ID ключ пользователя, будет постоянным при авторизации пользователя, можно использовать как уникальный ключ пользователя при сохранении способа авторизации.</td></tr><tr><td>profile\_id</td><td>ID из социальной сети в которой была авторизации</td></tr><tr><td>type</td><td>Ключ социальной сети, через которую была авторизация</td></tr><tr><td>mail</td><td>Email пользователя из социальной сети</td></tr><tr><td>name</td><td>Имя пользователя</td></tr><tr><td>surname</td><td>Фамилия пользователя</td></tr><tr><td>photo</td><td>Ссылка на фото профиля</td></tr><tr><td>userInfo</td><td>Оригинальный данные авторизации, которые были получены от социальной сети, отличаются в разных соц. сетях.</td></tr></tbody></table>

<p class="callout info">Используйте поля name, surname, mail и photo для заполнения профиля пользователя, они статичны для всех социальных сетей и автоматически подставляются из userInfo, где ключи данных отличаются.</p>

# Решение для Web приложения или сайта

Для реализации в Web можно использовать открытие страницы браузера и делать обработку на момент ее закрытия.

##### Алгоритм работы 

1. Пользователь нажимаем войти через соц. сеть
2. Открывается окно с ссылкой на авторизацию
3. На событие закрытие окна авторизации (оно будет закрыто автоматически) делаем обработку с key для получения данных или запроса на сервер.

##### Пример JavaScript кода

```javascript


//Пример функции генерации уникального ключа

function getAlphaNumericRandom = (len){
  if (len == undefined || len <= 0) {
    len = 1;
  }
  var characters =
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  var result = '';
  var iffirst = 0;
  for (var i = 0; i < len; i++) {
    if (i == 0) {
      iffirst = 10;
    } else {
      iffirst = 0;
    }
    result +=
      characters[Math.round(Math.random() * (characters.length - iffirst - 1))];
  }
  return result;
};

function generateUUID = (length) => {
  var baseStr = '';
  if (length) {
    for (var i = 0; i < length; i++) baseStr += 'x';
  } else {
    baseStr = 'xxxxxxxxxx';
  }
  var d = new Date().getTime();
  var uuid = baseStr.replace(/[xy]/g, function (c) {
    var r = (d + Math.random() * 16) % 16 | 0;
    d = Math.floor(d / 16);
    return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
  });
  return uuid;
};

//-----------------------------------


let key = new Date().getTime() + '-' + generateUUID(256) + '-' + getAlphaNumericRandom(100);
let type = "vk";

    let win = window.open(
      `https://auth4app.com/auth?soc=${type}&key=${key}`,
      '_blank'
    );

    const interval = setInterval(() => {
      if (win && win.closed) {
        clearInterval(interval);

        //Делаем запрос на сервер с key, на котором получаем данные через метод /hash
        //Или получаем данные локально через метод /hash
        
      }
    }, 500);
```

# Авторизация через социальные сети в CapacitorJS

Для авторизации через социальные сети в гибридном мобильном приложении CapacitorJS, используйте официальный плагин: [capacitor-simple-social-auth4app](https://www.npmjs.com/package/capacitor-simple-social-auth4app)  
  
Он создает нативное WebView для авторизации, сам генерирует ключ и возвращает его и данные пользователя в случае успешной авторизации.

```javascript
    SimpleSocialAuth4App.removeAllListeners();
    SimpleSocialAuth4App.auth({ social: "vk" });
    SimpleSocialAuth4App.addListener("authSuccess", (e) => {
      let key = e.key;
      //Логика работы с ключом для получения данных
      //Или запрос на сервер для авторизации
    });

    SimpleSocialAuth4App.addListener("authError", (e) => {
     //Ошибка авторизации
      console.log(e);
    });

```

# Авторизация через социальные сети в ReactNative

Для реализации авторизации через социальные сети в ReactNative можно использовать компонент WebView для отображения формы входа пользователю и получение результата авторизации по ссылкам редиректа.

```javascript

export const AuthScreen = () => {

  const key = "{УНИКАЛЬНЫЙ КЛЮЧ АВТОРИЗАЦИИ}";
  const soc = "vk"; //Ключ соц. сети

  const onNavigationStateChange = (e) => {
  
    
    if (e.url.indexOf('callback/error') > -1) {
      //Ошибка авторизации
    }
    if (e.url.indexOf('callback/success') > -1) {
     //Авторизация прошла успешно
    //Логика работы с key для получения данных локально
    //Или запрос на сервер
    }
  };


  const initUrl = `https://api.auth4app.com/auth?soc=${soc}&key=${key}`;

  return (
    <>
      <WebView
        source={{
          uri: initUrl,
        }}
        style={{flex: 1}}
        onNavigationStateChange={onNavigationStateChange}
      />
    </>
  );
}
```