[ЧАСТЬ-II] GSoC 2022 | Rocket.Chat | EmbeddedChat

Этот блог — вторая часть серии, в которой я рассказываю о своем путешествии в программе Google Summer of Code, о некоторых советах, уроках и некоторых дизайнерских решениях, которые мы (я и мой наставник) приняли для создания проекта EmbeddedChat.

Итак, время пришло, первая оценка приближается (25 — 29 июля). Я и взволнован, и нервничаю одновременно. Но давайте сначала поговорим об обычном.

EmbeddedChat до сегодняшнего дня (23 июля)

Добавление аутентификации Google Single sign-on в EmbeddedChat

Мы решили использовать SSO Auth, поскольку люди, посещающие веб-приложения, всегда торопятся. Они не хотят проходить множество шагов регистрации или даже указывать свои учетные данные. Поэтому мы выбрали этот подход, т.е. если кто-то впервые посещает веб-приложение и не имеет аккаунта в экземпляре RocketChat этой компании, то он может просто нажать кнопку «Войти с помощью Google», и аккаунт будет создан для него. Кроме того, если у кого-то уже есть аккаунт в соответствующем экземпляре RocketChat, то он также может войти в систему одним щелчком мыши.

Сначала кажется, что это просто, но потребовалось много исследований. Сначала я подумал, что должна существовать библиотека, которую я мог бы использовать, верно? Ближе всего я нашел библиотеку под названием -@react-oauth/google, но она не была совместима с тем, как конечная точка RocketChat Google OAuth обрабатывает запросы. Ему требовались acessToken и idToken, но здесь при успешном входе мы могли получить либо accessToken, либо объект code. idToken — это JWT-хэшированная версия объекта code. Подробнее об этом можно прочитать здесь. Поэтому после некоторого исследования я начал реализовывать пользовательский хук, который мог бы обрабатывать это с помощью обычного gapi-скрипта с нуля.
Но в gapi-script появились некоторые ошибки/предупреждения. Поэтому я исправил код и опубликовал собственную библиотеку на его основе.

Создал исправленную версию библиотеки gapi-script под названием gapi-cjs.

Итак, я исправил предупреждения use of eval, jest — test failed error, this is set to be undefined error и опубликовал библиотеку. Я использовал ее внутри EmbeddedChat для создания пользовательского хука.

// src/hooks/useGoogleLogin.js
import { gapi } from 'gapi-cjs';
import { useState, useEffect } from 'react';

export const useGoogleLogin = (GOOGLE_CLIENT_ID) => {
 ...
  const signIn = async () => {
    const auth = await gapi.auth2.getAuthInstance();
    await auth.signIn();
    const { access_token, id_token } = await auth.currentUser
      .get()
      .getAuthResponse();
    return { access_token, id_token };
  };
  ...
  return { user, signIn, signOut };
};
Вход в полноэкранный режим Выход из полноэкранного режима

В функции signin мы возвращаем accessToken, а также idToken, которые были необходимы для вызова конечной точки Google OAuth в RocketChat.

Была еще одна оговорка, с которой мы столкнулись: RocketChat запрашивает имя пользователя, когда пользователь регистрирует аккаунт. Поэтому мы решили и этот случай. Подробнее об этом вы можете прочитать здесь — Глава: Аутентификация.

Анонимный режим


Итак, у компонента будет свойство anoynmousMode. Если разработчик или компания, использующая EmbeddedChat, хочет, чтобы пользователи могли читать сообщения, даже не входя в систему, то они могут установить anonymousMode в true и включить анонимное чтение в своем экземпляре RocketChat.

PRs Merged or under review

  • RocketChat/EmbeddedChat — NEW: AUTH (google SSO)
  • RocketChat/Rocket.Chat.js.SDK — Исправление: предупреждения eval, исходящие от js-sha256

Поднятые вопросы

  • RocketChat/Rocket.Chat — Пользователь может отправить сообщение в канал, не присоединяясь к нему
  • RocketChat/Rocket.Chat.js.SDK — BUG: RC node.js SDK deps используют операторы eval

Документация

  • Вики: Глава — Аутентификация
  • Вики: Глава — Emoji Picker
  • Вики: Корни EmbeddedChat
  • PR: Документация по разработке

К концу

В конце этого месяца у нас будет полностью рабочий продукт (для демонстрации). Затем, мы будем двигаться вперед, чтобы добавить больше функций, таких как прикрепление, звезды, потоки и реакция на сообщения.

Если вы хотите подключиться:
Email: sidmohanty11@gmail.com
GitHub: https://github.com/sidmohanty11
LinkedIn: https://www.linkedin.com/in/sidmohanty11
Twitter: https://twitter.com/sidmohanty11

Проверьте проект, и если он вам понравился, вы тоже можете его отметить 🙂
https://github.com/RocketChat/EmbeddedChat

Оцените статью
devanswers.ru
Добавить комментарий