Bei Verwendung von Paginator (Backbone) kann nicht erkannt werden, ob der Benutzer angemeldet ist.js)
-
12-12-2019 - |
Frage
Ich benutze das Backbone.js Paginator Plugin.Es macht die unendliche Scroll-Paginierung gut, indem es eine eigene Sammlung für die an der Paginierung beteiligten Modelle definiert.Wenn der Benutzer angemeldet ist, gibt das PHP-Backend das Backbone-Objekt mit einem zusätzlichen Attribut zurück is_liked
um zu bewirken, dass dieses Element ein anderes CSS-Styling hat.
Problem:Wenn das Paginator-Plugin (mit einer eigenen Sammlung) Backbone.Paginator.requestPager
) bekommt ein fetch
anfrage im Backend, das Backend kann nicht feststellen, ob der Benutzer angemeldet ist!Wenn ich jedoch das Übliche benutze Backbone.Collection
, kann das Backend feststellen, ob der Benutzer angemeldet ist!Es funktioniert mit einem $.post()
zu.Das lässt mich denken, dass das Problem in den Plugins liegt Backbone.Paginator.requestPager
Ich überprüfe die Ergebnisse mithilfe des Netzwerkbereichs der Entwicklertools von Chrome.Wenn die Authentifizierungsprüfung funktioniert, api/test
kann gesehen werden, um einige Daten über den Benutzer zurückzugeben.Wenn der Anmeldestatus nicht ermittelt werden kann, wird null zurückgegeben
UPDATE: Der GET
anfrage gesendet von Backbone.Paginator.requestPager
sammlung enthält nicht die Cookie
informationen in den Kopfzeilen, die in der gefunden werden GET
anfrage gesendet von Backbone.Collection
.Könnte das das Problem sein?Wie kann ich zwingen Backbone.Paginator.requestPager
um die Cookie-Daten nicht aus den Headern zu entfernen?
Was passiert hier?Und wie kann ich das lösen (ohne meinen eigenen Paginierungscode neu zu schreiben)?
Authentifizierungstest mit 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());
});
Typische Backbone-Sammlung [Werke]
SimilarUserCollection = Backbone.Collection.extend({
model: User,
url: 'api/test'
});
Paginators Sammlung [funktioniert nicht]
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;
}
});
Lösung
Dies ist ein domänenübergreifendes Problem:
Eine Anfrage geht an diese URL:http://www.mysite.com/api/test?page=1
Und der andere dazu:http://mysite.com/api/test
Für die Browser www.mysite.com ist völlig anders, also wenn der Cookie am generiert wird www.mysite.com anfragen an mysite.com wird es nicht enthalten.Stellen Sie sicher, dass beide Anfragen an dieselbe Domain gehen und Sie kein Cookie-Problem haben.