автоматизированный вход в систему для пользователя rocketchat в iframe, встроенном в угловой компонент 6 - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь автоматически авторизовать пользователей на моем сервере rocketchat через мое угловое приложение / компонент 6 (где пользователи уже должны войти в систему).

Есть ли у кого-нибудь опыт прямого манипулирования mongodb для входа в систему с помощью ракетного чата?Я могу обновить базу данных сгенерированным токеном, но не могу получить iframe для чтения / принятия сгенерированного токена.

У меня есть прямой доступ к базе данных mongodb / rocketchat, которой я пытаюсь манипулировать, чтобы сохранить токен для входа в систему.доступ.Я сохраняю сгенерированный токен (я использую UUID) в пользовательском документе в полях services: {iframe: «Генерируемый токен"}, где сгенерированный токен заменен моим uuid.

Я установилтот же самый токен под window.localstorage и опубликуйте сообщение в соответствии с просьбой, приведенной в документации: https://rocket.chat/docs/developer-guides/iframe-integration/authentication/#managing-mongodb-directly

Я не могу заставить это работать.Я не получаю никаких ошибок в консоли - так что, похоже, это не проблема CORS.

Сервер rocketchat, находящийся в разработке, размещается на отдельном компьютере в моей сети (http://project -mgr: 3000 ).

Я использую свою локальную машину дляразработка (http://localhost:4000).

//component
login() {
      //retrieve a list of rocketchat users from mdb
      this.rocketService.allUsers().subscribe((au) => {
          //retrieve current user from mdb
          let user = au[this.user.mail]; // 

          //generate token
          let token = API.UUID();

          //manipulate rocketchat mdb entry with token info
          user.services = { iframe: token }

          //update mdb entry for user
          this.rocketService.login(user).subscribe(() => {

            //set local storage with token info
            window.localStorage.setItem("Meteor.userId", user._id);
            window.localStorage.setItem("Meteor.loginToken", token);

            //post message
            window.parent.postMessage({
            event: 'try-iframe-login'
          }, 'http://localhost:4000');
        });
      })
  }

ngOnInit() {
    window.addEventListener('message', (event:any) =>
          console.log(event)
     );

    this.subscriptions.push(
      //retrieve currently logged in user
      this.authService.user.subscribe((u) => {
        this.user = new User(u);

        //login to rocket chat
        this.login();
        }))
  }

//html - not safe, but for development only

<div fxLayout="column" fxLayoutAlign="stretch"
style="height:calc(100vh - 80px);width:100%;">

  <iframe #rocketChat frameborder="0" width="100%" height="100%"
  sandbox="allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups
          allow-popups-to-escape-sandbox" [src]="'http://project-mgr:3000' | safe: 'resourceUrl'">
  </iframe>
</div>

Интерфейс входа в систему для rocketchat не изменяется (или не регистрируется), но из подписки на событие генерируются два сообщения.

У них есть данные события:

data: "" eventName: "непрочитано-изменено"

и

data: true eventName: "startup"

Мне не удалось выяснитьесли это полезно или не имеет значения.

...