3.2.4 • Published 3 years ago

guestia_client v3.2.4

Weekly downloads
14
License
ISC
Repository
github
Last release
3 years ago

Guestia client

guestia_client — web-клиент для работы с юзером aviasales имеет следующий функционал:

  • Аутентификацию и авторизацию пользователя;
  • Хранение и изменение настроек пользователя как на сервере, так и локально используя cookie и localStorage;

Установка

$ npm install guestia_client

Начало использования

Для использования, необходимо создать инстанс класса со следующими параметрами:

{
  // Обязательные поля

  // Идентификатор девайса
  uid: string
  // Схема настроек пользователя.
  // Определяем как будут хранится те или иные настройки при использовании этого инстанса
  schema: {
  }

  // Опциональные поля
  host: string
  authHost: string
  apiVersion: number
  // Источник хранения локально. По-умолчанию 'cookie'
  storageProvider: 'localStorage' | 'cookie' | undefined
}

Пример использования:

const client = new Guestia({
  uid: Cookie.get('auid'),
  schema: {
    passengers: {
      storageProvider: 'localStorage',
    },
    currency: {
      domain: '.aviasales.ru',
      expires: Infinity,
      defaultValue: 'rub',
    },
  },
})

export default client

Доступные методы класса

Login

Чтобы залогинить пользователя необходимо вызвать метод login с указанием соответствующего метода (провайдера) авторизации.

Пример использования:

const { jwt, userInfo } = await client.login(method)

Где method — строка, один из доступных провайдеров авторизации: vk, facebook, twitter, ok, google, mail_ru, yandex, wechat, line, apple

Logout

Пример использования:

client.logout()

Authorization

Пример использования:

const { jwt } = await client.authorize()
if (jwt) {
  console.log('User authorized')
} else {
  console.log('User unauthorized')
}

Получение информации о пользователе

Метод getUserInfo() возвращает Promise со следующей схемой userInfo:

interface UserInfo {
  details: {
    auid: string[]
    email: string[]
    photos: {
      max: string | null
      medium: string | null
      small: string | null
    }
  }
  first_name: string
  id: string
  last_ip_address: string
  last_login_at: string
  last_login_method: string
  last_name: string
  name: string
}

Пример использования:

const { name } = await client.getUserInfo()

Получение настройки пользователя

Настройки пользователя всегда хранятся в строчном значении. Если сохраняем объект, то храним json

Пример использования:

const currency = client.getSettings(‘currency’) // rub

Получение всех настроек пользователя

const { currency } = client.getAllSettings() // { passenger: null, currency: "rub" }

Сохранение настройки

client.setSettings('currency', 'usd')

Возвращает Promise, который зарезолвится когда произойдёт успешное сохранение

Получение JWT

client.getJWT()

Вернёт string | null

Получение userId в базе guestia

По-сути, метод просто декодирует и парсит jwt пользователя. Поэтому он синхронный и возвращает строку

client.getUserId()

Авторизация по jwt стороннего ресурса

На данный момент доступна для google(one-tap) и yandex. В этом случае, sdk возвращает jwt, по которому мы можем авторизовать юзера минуя классическую схему OAuth.

client.jwtAuth(provider: AvailableJwtAuthProviders, idToken: string)

Метод асинхронный и возвращает такой же Promise как и в методе login


Поведение guestia_client в webview

Проблема

Текущая реализация gustia_client работает с авторизационным всплывающим окном и передаёт значение jwt через postMessage в основное окно. Но в такой реализации, есть проблема с webview, т.к. там всплывающие окна являются обычным новым окном из которого мы не можем послать postMessage.

Решение

Мы делаем редирект обратно на страницу, с которого было открыто окно авторизации и при этом записываем в куки необходимую информацию о юзере, чтобы его в дальнейшем идентефицировать. Что бы после такого редиректа понять авторизован пользователь или нет, нужно:

const client = new Guestia({…})
const { jwt } = await client.authorize() // Авторизуем, получаем jwt
const isAuthorized = !!jwt // jwt: string | null
3.2.4

3 years ago

3.2.3

3 years ago

3.2.2

3 years ago

3.2.2-0

3 years ago

3.2.1

4 years ago

3.2.0

4 years ago

3.1.0

4 years ago

3.0.1

4 years ago

3.1.0-2

4 years ago

3.1.0-1

4 years ago

3.1.0-0

4 years ago

3.0.0

4 years ago

3.0.0-15

5 years ago

3.0.0-14

5 years ago

3.0.0-13

5 years ago

3.0.0-12

5 years ago

3.0.0-11

5 years ago

3.0.0-10

5 years ago

3.0.0-9

5 years ago

3.0.0-8

5 years ago

3.0.0-7

5 years ago

3.0.0-6

5 years ago

3.0.0-5

5 years ago

3.0.0-4

5 years ago

3.0.0-3

5 years ago

2.7.1

5 years ago

2.7.0

5 years ago

2.6.0

5 years ago

2.5.1-2

5 years ago

2.5.1-1

5 years ago

2.5.1-0

5 years ago

3.0.0-2

5 years ago

3.0.0-1

5 years ago

3.0.0-0

5 years ago

2.5.0

5 years ago

2.4.3-2

5 years ago

2.4.3-1

5 years ago

2.4.3-0

5 years ago

2.4.2

5 years ago

2.4.1

5 years ago

2.4.1-1

5 years ago

2.4.1-0

5 years ago

2.4.0

5 years ago

2.4.0-0

5 years ago

2.3.1

5 years ago

2.3.0

5 years ago

2.2.4-4

5 years ago

2.2.4-3

5 years ago

2.2.4-2

5 years ago

2.2.4-1

5 years ago

2.2.4-0

5 years ago

2.2.3

6 years ago

2.2.2

6 years ago

2.2.1

6 years ago

2.2.0

6 years ago

2.2.0-0

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.1.0-6

6 years ago

2.1.0-5

6 years ago

2.1.0-4

6 years ago

2.1.0-3

6 years ago

2.1.0-2

6 years ago

2.1.0-1

6 years ago

2.1.0-0

6 years ago

2.0.17

7 years ago

2.0.16

7 years ago

2.0.15

7 years ago

2.0.14

7 years ago

2.0.13

7 years ago

2.0.12

7 years ago

2.0.11

7 years ago

1.0.16

7 years ago

2.0.10

7 years ago

2.0.9

7 years ago

2.0.8

7 years ago

2.0.7

7 years ago

2.0.6

7 years ago

2.0.5

7 years ago

2.0.4

7 years ago

2.0.3

7 years ago

2.0.2

7 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.0.15

7 years ago

1.0.14

7 years ago

1.0.13

7 years ago

1.0.12

7 years ago

1.0.11

7 years ago

1.0.10

7 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago