Я пытаюсь автоматически авторизовать пользователей на моем сервере 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"
Мне не удалось выяснитьесли это полезно или не имеет значения.