2011-07-08 16 views

Odpowiedz

2

Źródło zdarzenia dotyczy serwera wysyłającego zdarzenia do klienta. Myślę, że potrzebujesz uwierzytelnienia dwukierunkowego. W jaki sposób wyślesz rzeczywiste dane uwierzytelniające?

WebSockets może to jednak osiągnąć. Czy tego właśnie szukasz?

Aktualizacja:

Można osiągnąć to, co chcesz przez wykorzystanie ciasteczek, jak podkreślił 4esn0k. Pliki cookie wysyłane są wraz z pierwotnym żądaniem, które przeglądarka nawiązuje w celu nawiązania połączenia. Dlatego upewnij się, że ustawiłeś identyfikator sesji dla pliku cookie przed uruchomieniem jakichkolwiek połączeń do EventSource.

+3

EventSource musi zainicjować połączenie i dba o utrzymanie go otworzyć, albo nigdy nie zamykając go, jeśli nie jest zamknięta przez serwer lub próbę przywrócenia go na czas nieokreślony, jeśli jest zamykany przez serwer. Tak czy inaczej, EventSource musi wykonać pierwszy krok w połączeniu. EventSource jest idealny do mojego celu, ale chciałbym, aby wysyłać informacje uwierzytelniające podczas wysyłania żądania. –

+1

Na podstawie specyfikacji (http://dev.w3.org/html5/eventsource/) nie ma możliwości wysłania tych poświadczeń, których się obawiam. – Tower

+0

@Tower Nie zgadzam się. Źródło zdarzenia jest tylko żądaniem http, które jest utrzymywane przy życiu i ma typ treści "tekst/strumień zdarzeń". Możesz przekazać plik cookie jako dowolne inne żądanie http (zakładając, że jesteś już uwierzytelniony) lub możesz przekazać referencje za pomocą ciągu zapytania – saml

2

Jeśli mówić o plikach cookie (nie http auth):

EventSource używa http, więc cookies Wysłano wiadomość z żądaniem połączenia EventSource.

http auth należy wspierać wszelkie inne adresy URL http, chociaż z wyspecjalizoway CORS + http auth nie jest obsługiwana

1

szukam rozwiązania tego samego problemu. Ten post here mówi tak:

Innym zastrzeżeniem jest to, że o ile nam wiadomo, nie można przy użyciu EventSource zmienić http nagłówków, co oznacza, że ​​trzeba złożyć autoryzacji ciąg kwerendy param z wartością, która Cię Zostałby wstawiony wstawiony przy użyciu uwierzytelniania HTTP Basic: zakodowane w base64 twoje logowanie i token.

Oto kod ze stanowiska:

// First, we create the event source object, using the right URL. 
 
var url = "https://stream.superfeedr.com/?"; 
 
url += "&hub.mode=retrieve"; 
 
url += "&hub.topic=http%3A%2F%2Fpush-pub.appspot.com%2Ffeed"; 
 
url += "&authorization=anVsaWVuOjJkNTVjNDhjMDY5MmIzZWFkMjA4NDFiMGViZDVlYzM5"; 
 

 
var source = new EventSource(url); 
 

 
// When the socket has been open, let's cleanup the UI. 
 
source.onopen = function() { 
 
    var node = document.getElementById('sse-feed'); 
 
    while (node.hasChildNodes()) { 
 
    node.removeChild(node.lastChild); 
 
    } 
 
}; 
 

 
// Superfeedr will trigger 'notification' events, which corresponds 
 
// exactly to the data sent to your subscription endpoint 
 
// (webhook or XMPP JID), with a JSON payload by default. 
 
source.addEventListener("notification", function(e) { 
 
    var notification = JSON.parse(e.data); 
 
    notification.items.sort(function(x, y) { 
 
    return x.published - y.published; 
 
    }); 
 
    notification.items.forEach(function(i) { 
 
    var node = document.getElementById('sse-feed'); 
 
    var item = document.createElement("li"); 
 
    var t = document.createTextNode([new Date(i.published * 1000), i.title, i.content].join(' ')); 
 
    item.appendChild(t); 
 
    node.insertBefore(item, node.firstChild); 
 
    // We add the element to the UI. 
 
    }); 
 
});

Powiązane problemy