3.2.4 • Published 4 years ago

guestia_client v3.2.4

Weekly downloads
14
License
ISC
Repository
github
Last release
4 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

4 years ago

3.2.3

4 years ago

3.2.2

4 years ago

3.2.2-0

5 years ago

3.2.1

5 years ago

3.2.0

5 years ago

3.1.0

5 years ago

3.0.1

5 years ago

3.1.0-2

6 years ago

3.1.0-1

6 years ago

3.1.0-0

6 years ago

3.0.0

6 years ago

3.0.0-15

6 years ago

3.0.0-14

6 years ago

3.0.0-13

6 years ago

3.0.0-12

6 years ago

3.0.0-11

6 years ago

3.0.0-10

6 years ago

3.0.0-9

6 years ago

3.0.0-8

6 years ago

3.0.0-7

6 years ago

3.0.0-6

6 years ago

3.0.0-5

6 years ago

3.0.0-4

6 years ago

3.0.0-3

6 years ago

2.7.1

6 years ago

2.7.0

6 years ago

2.6.0

6 years ago

2.5.1-2

6 years ago

2.5.1-1

6 years ago

2.5.1-0

6 years ago

3.0.0-2

6 years ago

3.0.0-1

6 years ago

3.0.0-0

6 years ago

2.5.0

6 years ago

2.4.3-2

6 years ago

2.4.3-1

6 years ago

2.4.3-0

6 years ago

2.4.2

6 years ago

2.4.1

6 years ago

2.4.1-1

6 years ago

2.4.1-0

6 years ago

2.4.0

6 years ago

2.4.0-0

6 years ago

2.3.1

7 years ago

2.3.0

7 years ago

2.2.4-4

7 years ago

2.2.4-3

7 years ago

2.2.4-2

7 years ago

2.2.4-1

7 years ago

2.2.4-0

7 years ago

2.2.3

7 years ago

2.2.2

7 years ago

2.2.1

7 years ago

2.2.0

7 years ago

2.2.0-0

7 years ago

2.1.1

7 years ago

2.1.0

7 years ago

2.1.0-6

7 years ago

2.1.0-5

7 years ago

2.1.0-4

7 years ago

2.1.0-3

7 years ago

2.1.0-2

7 years ago

2.1.0-1

7 years ago

2.1.0-0

7 years ago

2.0.17

8 years ago

2.0.16

8 years ago

2.0.15

8 years ago

2.0.14

8 years ago

2.0.13

8 years ago

2.0.12

8 years ago

2.0.11

8 years ago

1.0.16

8 years ago

2.0.10

8 years ago

2.0.9

8 years ago

2.0.8

8 years ago

2.0.7

8 years ago

2.0.6

8 years ago

2.0.5

8 years ago

2.0.4

8 years ago

2.0.3

8 years ago

2.0.2

8 years ago

2.0.1

8 years ago

2.0.0

8 years ago

1.0.15

9 years ago

1.0.14

9 years ago

1.0.13

9 years ago

1.0.12

9 years ago

1.0.11

9 years ago

1.0.10

9 years ago

1.0.9

9 years ago

1.0.8

9 years ago

1.0.7

9 years ago

1.0.6

9 years ago

1.0.5

9 years ago

1.0.4

9 years ago

1.0.3

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago