No se puede detectar si el usuario ha iniciado sesión cuando usa Paginator (backbone.js)
-
12-12-2019 - |
Pregunta
estoy usando el Paginador Backbone.js enchufar.Realiza bien la paginación de desplazamiento infinito al definir su propia Colección para los modelos involucrados en la paginación.Si el usuario ha iniciado sesión, el backend de PHP devolverá el objeto Backbone con un atributo adicional is_liked
para hacer que ese elemento tenga un estilo CSS diferente.
Problema:Cuando el complemento Paginator (con su propia Colección Backbone.Paginator.requestPager
) hace un GET fetch
solicitud en el backend, ¡el backend no puede determinar si el usuario ha iniciado sesión!Sin embargo, cuando uso lo habitual Backbone.Collection
, el backend puede determinar si el usuario ha iniciado sesión.Funciona con un $.post()
también.Esto me hace pensar que el problema radica en el complemento. Backbone.Paginator.requestPager
Estoy comprobando los resultados utilizando la sección Red de las herramientas para desarrolladores de Chrome.Si la verificación de autenticación funciona, api/test
Se puede ver que devuelve algunos datos sobre el usuario.Si no se puede determinar el estado de inicio de sesión, devuelve nulo
ACTUALIZAR: El GET
solicitud enviada por Backbone.Paginator.requestPager
La colección no incluye el Cookie
información en los encabezados que se encuentran en el GET
solicitud enviada por Backbone.Collection
.¿Podría ser este el problema?¿Cómo puedo forzar Backbone.Paginator.requestPager
¿No eliminar los datos de las cookies de los encabezados?
¿Que está sucediendo aquí?¿Y cómo puedo solucionar esto (sin reescribir mi propio código de paginación)?
Prueba de autenticación usando PHP Backend (Laravel Framework)
Route::any('api/test', function() {
// This will return some data of the user if logged in
return json_encode(Auth::user());
});
Colección típica de Backbone [Obras]
SimilarUserCollection = Backbone.Collection.extend({
model: User,
url: 'api/test'
});
Colección del paginador [no funciona]
PhotoCollection = Backbone.Paginator.requestPager.extend({
model: Photo,
paginator_core: {
type: 'GET',
dataType: 'json',
url: 'api/test'
},
paginator_ui: {
firstPage: 1,
currentPage: 1,
perPage: 7,
totalPages: 10
},
server_api: {
'page': function() { return this.currentPage; }
},
parse: function (response) {
return response;
}
});
Solución
Este es un problema entre dominios:
Una solicitud es a esta URL:http://www.mysite.com/api/test?page=1
Y el otro a esto:http://mysite.com/api/test
Para los navegadores www.mysite.com es totalmente diferente, por lo que si la Cookie se genera en www.mysite.com, las solicitudes a mysite.com no la contendrán.Asegúrese de que ambas solicitudes vayan al mismo dominio y no tendrá el problema de las cookies.