Não é possível detectar se o usuário está logado ao usar o Paginator (backbone.js)
-
12-12-2019 - |
Pergunta
estou usando o Paginador Backbone.js plugar.Ele faz bem a paginação de rolagem infinita, definindo sua própria coleção para os modelos envolvidos na paginação.Se o usuário estiver logado, o backend PHP retornará o objeto Backbone com um atributo adicional is_liked
para fazer com que esse item tenha um estilo CSS diferente.
Problema:Quando o plugin Paginator (com sua própria coleção Backbone.Paginator.requestPager
) faz um GET fetch
solicitação no backend, o backend não consegue determinar se o usuário está logado!No entanto, quando uso o habitual Backbone.Collection
, o backend é capaz de determinar se o usuário está logado!Funciona com um $.post()
também.Isso me faz pensar que o problema está no plugin Backbone.Paginator.requestPager
Estou verificando os resultados usando a seção Rede das ferramentas para desenvolvedores do Chrome.Se a verificação de autenticação funcionar, api/test
pode ser visto retornando alguns dados sobre o usuário.Se o status de login não puder ser determinado, ele retornará nulo
ATUALIZAR: O GET
solicitação enviada por Backbone.Paginator.requestPager
coleção não inclui Cookie
informações nos cabeçalhos encontrados no GET
solicitação enviada por Backbone.Collection
.Esse poderia ser o problema?Como posso forçar Backbone.Paginator.requestPager
não retirar os dados dos cookies dos cabeçalhos?
O que esta acontecendo aqui?E como posso resolver isso (sem reescrever meu próprio código de paginação)?
Teste de autenticação 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());
});
Coleção Backbone Típica [Funciona]
SimilarUserCollection = Backbone.Collection.extend({
model: User,
url: 'api/test'
});
Coleção do Paginator [não 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;
}
});
Solução
Este é um problema entre domínios:
Uma solicitação é para este URL:http://www.mysite.com/api/test?page=1
E o outro para isso:http://mysite.com/api/test
Para os navegadores www.mysite.com é totalmente diferente, portanto se o Cookie for gerado em www.mysite.com as solicitações para mysite.com não o conterão.Certifique-se de que ambas as solicitações vão para o mesmo domínio e você não terá problemas com cookies.