Impossible de détecter si l'utilisateur est connecté lors de l'utilisation de Paginator (backbone.js)
-
12-12-2019 - |
Question
J'utilise le Paginateur Backbone.js brancher.Il réalise bien la pagination à défilement infini en définissant sa propre collection pour les modèles impliqués dans la pagination.Si l'utilisateur est connecté, le backend PHP renverra l'objet Backbone avec un attribut supplémentaire is_liked
pour que cet élément ait un style CSS différent.
Problème:Lorsque le plugin Paginator (avec sa propre Collection Backbone.Paginator.requestPager
) fait un GET fetch
requête sur le backend, le backend n'est pas en mesure de déterminer si l'utilisateur est connecté !Cependant, lorsque j'utilise l'habituel Backbone.Collection
, le backend est capable de déterminer si l'utilisateur est connecté !Cela fonctionne avec un $.post()
aussi.Cela me fait penser que le problème réside dans le plugin Backbone.Paginator.requestPager
Je vérifie les résultats en utilisant la section Réseau des outils de développement de Chrome.Si le contrôle d'authentification fonctionne, api/test
peut être vu pour renvoyer certaines données sur l'utilisateur.Si le statut de connexion ne peut pas être déterminé, il renvoie null
MISE À JOUR: Le GET
demande envoyée par Backbone.Paginator.requestPager
la collection n'inclut pas les Cookie
informations dans les en-têtes qui se trouvent dans le GET
demande envoyée par Backbone.Collection
.Est-ce que ceci pourrait être le problème?Comment puis-je forcer Backbone.Paginator.requestPager
ne pas supprimer les données des cookies des en-têtes ?
Que se passe-t-il ici?Et comment puis-je résoudre ce problème (sans réécrire mon propre code de pagination) ?
Test d'authentification à l'aide du backend PHP (Laravel Framework)
Route::any('api/test', function() {
// This will return some data of the user if logged in
return json_encode(Auth::user());
});
Collection Backbone typique [Œuvres]
SimilarUserCollection = Backbone.Collection.extend({
model: User,
url: 'api/test'
});
Collection du paginateur [ne fonctionne pas]
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;
}
});
La solution
Il s'agit d'un problème interdomaine :
Une requête est adressée à cette URL :http://www.mysite.com/api/test?page=1
Et l'autre à ceci :http://monsite.com/api/test
Pour les navigateurs, www.monsite.com est totalement différent, donc si le cookie est généré sur www.monsite.com, les requêtes adressées à monsite.com ne le contiendront pas.Assurez-vous que les deux demandes vont au même domaine et vous n'aurez pas de problème de cookies.