2011-07-08 32 views

Respuesta

2

EventSource trata del servidor que envía eventos al cliente. Creo que necesitas comunicación bidireccional para la autenticación. ¿Cómo enviarías las credenciales reales?

WebSockets, sin embargo, puede lograr eso. ¿Es esto lo que estás buscando?

Actualización:

Puede lograr lo que quiere mediante la utilización de cookies, como ha señalado 4esn0k. Las cookies se envían junto con la solicitud inicial que hace el navegador para establecer la conexión. Por lo tanto, solo asegúrese de establecer el identificador de sesión para la cookie antes de iniciar cualquier conexión de EventSource.

+3

EventSource tiene que inicializar una conexión y se encarga de mantenerlo abierto, ya sea por no cerrar si no se cierra por el servidor o tratando de restablecerlo indefinidamente si el servidor lo está cerrando. De cualquier manera, EventSource tiene que dar el primer paso en la conexión. EventSource es ideal para mi propósito, pero me gustaría que envíe información de autenticación al realizar una solicitud. –

+1

Basado en la especificación (http://dev.w3.org/html5/eventsource/), no hay forma de enviar esas credenciales, me temo. – Tower

+0

@Tower No estoy de acuerdo. Un EventSource es simplemente una solicitud http que se mantiene activa y tiene un tipo de contenido de 'text/event-stream'. Puede pasar una cookie como cualquier otra solicitud http (suponiendo que ya esté autenticado) o puede pasar credenciales a través de una cadena de consulta – saml

2

Si su charla acerca de las cookies (no http autenticación):

EventSource utiliza HTTP, por lo que las galletas son enviados atendiendo solicitud de conexión EventSource.

autenticación HTTP debe ser apoyado como cualesquiera otras direcciones URL http, aunque desde CORS de especificaciones de autenticación HTTP + no es compatible

1

Busco una solución al mismo problema. Este post here dice esto:

Otra advertencia es que por lo que sabemos, no se puede cambiar el HTTP cabeceras cuando se utiliza EventSource, lo que significa que tiene que presentar una autorización cadena de consulta parámetro con el valor que se tendría insertada usando HTTP Basic Auth: una concatenación codificada en base64 de su inicio de sesión y un token.

Este es el código del mensaje:

// 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. 
 
    }); 
 
});

Cuestiones relacionadas