guestia_client
TypeScript icon, indicating that this package has built-in type declarations

3.2.4 • Public • Published

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

Readme

Keywords

none

Package Sidebar

Install

npm i guestia_client

Weekly Downloads

4

Version

3.2.4

License

ISC

Unpacked Size

51.8 kB

Total Files

26

Last publish

Collaborators

  • nikitabulatov
  • rakoth3d
  • quadrifolium
  • mostalt
  • sagdeev