Использование NgStomp beforeConnect в InjectableRxStompConfig - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь создать angular клиент, который использует websockets, и я использую @ stomp / ng2-stompjs. Я следую этому руководству https://stomp-js.github.io/guide/ng2-stompjs/ng2-stomp-with-angular7.html

Все работает отлично за исключением того, что мне нужно установить в connectHeaders токен, который я использую для аутентификации на стороне сервера, для этого я прочитал, что мне нужно использовать функцию передConnect

Я пробовал по-разному, но я не понимаю, как чтобы использовать его, он зависает или отправляет пустой токен

Мой rxStompConfig:

класс экспорта RxStompConfig extends InjectableRxStompConfig {

constructor(private userService: UserService) {
    super();
    this.brokerURL = env.wsServerBaseUrl;

    // Interval in milliseconds, set to 0 to disable
    this.heartbeatIncoming = 0; // Typical value 0 - disabled
    this.heartbeatOutgoing = 20000; // Typical value 20000 - every 20 seconds

    // Wait in milliseconds before attempting auto reconnect
    // Set to 0 to disable
    // Typical value 500 (500 milli seconds)
    this.reconnectDelay = 5000;
    // Will log diagnostics on console
    // It can be quite verbose, not recommended in production
    // Skip this key to stop logging to console
    this.debug = (msg: string): void => {
        console.log(new Date(), msg);
    };
    console.log('Constructor ' + this.connectHeaders);

    this.beforeConnect = (): Promise<void> => {
        return new Promise<void>((resolve, reject) => {
            this.userService.currentToken.subscribe(token => {
                console.log('Subscribed');
                if (token) {
                    console.log('Resolved ' + token);
                    this.connectHeaders = { Authorization: `Bearer ${token}`};
                    resolve();
                }
            });
        });
    };
}

Я беру токен из службы который выполняет аутентификацию и устанавливает токен

Это метод currentToken:

get currentToken(): Observable<string> {
    return this.$token.asObservable();
}

Может кто-нибудь помочь мне в этом?

1 Ответ

1 голос
/ 05 апреля 2020

Отметьте это

https://github.com/stomp-js/rx-stomp/issues/204

Было исправлено, что должно решить вашу проблему. По сути, теперь в beforeConnect вы можете получить stompClient, который можно настроить, и в вашем конкретном случае вы сможете установить connectHeaders

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...