Это зависит от того, как вы настроили сервер SSE, и от того, ищете ли вы аутентифицированных пользователей. Вам необходимо настроить ваш эхо-сервер для обработки аутентификации, используя Go http.Handler
Как только вы это сделаете, не имеет значения, знаете ли вы имя канала и сервер, серверную часть все еще может отклонить отправку сообщений пользователям без токенов. Не думайте об этом как о токене как о том, что используется для создания канала, скорее думайте о нем как о запросе на подписку - вот что нужно - и затем в зависимости от того, аутентифицирован ли запрос или нет, служба затем либо разрешит, либо отказаться. Служба pu sh должна постоянно делать это для всех запросов на подписку.
Сервер - это то, что выдает токен при аутентификации, и как только вы получите свой ключ, вы можете сообщить серверу, что вы зарегистрирован, добавив токен в качестве параметра строки запроса с именем «ключ», или вы можете предоставить заголовок в вашем запросе. Вот как:
var key ='xVLyHw.HSvCPg:d1RaNTqnY3s4EZZh';
var url ='https://realtime.ably.io/event-stream?channels=myChannel&v=1.1&key=' + key;
var eventSource = new EventSource(url);
eventSource.onmessage = function(event) {
var message = JSON.parse(event.data);
console.log('Message: ' + message.name + ' - ' + message.data);
};
пример взят из: https://www.ably.io/documentation/sse
Вы также можете получить токен авторизации и передать его в свою строку запроса "accessToken" - аналогично тому, как вы делаете это с ключом в приведенном выше примере. Но учтите, что вы можете буквально скопировать и передать этот ключ кому-нибудь там, и тогда они смогут прослушивать один и тот же канал. Вы также можете сохранить токен аутентификации в localalstorage и передать его в качестве заголовка. Вы можете использовать эту библиотеку для достижения этой цели:
var EventSource = EventSourcePolyfill;
const eventSource = new EventSource(`blabla:3000/sse?channel=myProject${projectID}`,{
headers: {
'Authorization': 'my secret jwt token' // or localStorage.getItem("myToken")
}
});
Библиотека для добавленных заголовков находится здесь: https://github.com/Yaffle/EventSource
Или вы можете использовать basi c auth, который может генерировать Cook ie, и отправить запрос на подписку вместе с Cook * ie, установив withCredentials = true:
var source = new EventSource(`blabla:3000/sse?channel=myProject${projectID}`, { withCredentials: true });