Socket
Book a DemoInstallSign in
Socket

guestia_client

Package Overview
Dependencies
Maintainers
5
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

guestia_client

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

3.2.4
latest
Source
npmnpm
Version published
Weekly downloads
28
180%
Maintainers
5
Weekly downloads
 
Created
Source

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

FAQs

Package last updated on 25 Mar 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.