guestia_client
v3.2.4
Published
`guestia_client` — web-клиент для работы с юзером aviasales имеет следующий функционал:
Downloads
32
Keywords
Readme
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 Вход
- logout Выход
- authorize Авторизация
- getUserInfo Получение информации о пользователе
- getSettings Получение настройки пользователя
- setSettings Сохранение настройки
- getAllSettings Получение всех настроек пользователя
- getJWT Получение JWT
- getUserId Получение userId в базе guestia
- jwtAuth Авторизация по jwt стороннего ресурса
- Поведение guestia_client в webview
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