我正在使用 Backbone.js 分页器 插入。它通过为分页中涉及的模型定义自己的 Collection 来很好地实现无限滚动分页。如果用户登录,PHP后端将返回带有附加属性的Backbone对象 is_liked 使该项目具有不同的 CSS 样式。

问题:当Paginator插件(有自己的Collection) Backbone.Paginator.requestPager) 执行 GET fetch 向后端请求,后端无法判断用户是否登录!然而,当我使用通常的 Backbone.Collection, ,后台能够判断用户是否登录!它与一个 $.post() 也。这让我认为问题出在插件的 Backbone.Paginator.requestPager

我正在使用 Chrome 开发者工具的网络部分检查结果。如果身份验证检查有效, api/test 可以看到返回了一些关于用户的数据。如果无法确定登录状态,则返回null

更新:GET 请求发送者 Backbone.Paginator.requestPager 集合不包括 Cookie 标题中的信息可以在 GET 请求发送者 Backbone.Collection. 。这可能是问题所在吗?我怎样才能强迫 Backbone.Paginator.requestPager 不从标头中删除 cookie 数据?

这里发生了什么?我该如何解决这个问题(无需重写我自己的分页代码)?

使用 PHP 后端(Laravel 框架)进行身份验证测试

Route::any('api/test', function() {
    // This will return some data of the user if logged in
    return json_encode(Auth::user());  
});

典型骨干集合[作品]

SimilarUserCollection = Backbone.Collection.extend({
    model: User,
    url: 'api/test'
});

分页器的集合 [不起作用]

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;
    }

});
有帮助吗?

解决方案

这是一个跨域问题:

一个请求是针对此 URL:http://www.mysite.com/api/test?page=1

另一个:http://mysite.com/api/test

对于浏览器来说,www.mysite.com 是完全不同的,因此如果 Cookie 是在 www.mysite.com 上生成的,则对 mysite.com 的请求将不会包含它。确保两个请求都发送到同一个域,这样就不会出现 Cookie 问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top