1

我正在使用 TastyPie 和 Django 为将具有浏览器和移动(本机 iOS)客户端的应用程序构建我的后端。

我已经通过 TastyPie 和 Django 文档,可以使用我设置的 TastyPie 资源或使用内置视图的 Django 成功进行身份验证。我看到了很多关于在页面上包含 CSRF 令牌并使用您的 JavaScript 抓取它的示例,这很有效,但我现在不明白要实际确定用户是否在初始页面加载(来自 JavaScript)时登录。

例子:

如果我想从一个单独的快速 Web 服务器提供静态 HTML,并缓存我的应用程序 JavaScript,并且只通过 TastyPie 视图与 Django 交互,我如何确定用户是否已登录(并且知道呈现登录表单或使用 JavaScript 的应用程序视图),注销后,是否需要从客户端浏览器中删除任何会话信息?

如果我要通过 Django 的模板引擎提供 HTML,我可以通过那里适当地呈现登录表单,但如果我想真正将我的 JavaScript 应用程序与 Django 分离(并且表现得像一个移动客户端),这似乎并不理想。

编辑:我正在使用 Backbone.js,但我认为这无关紧要。

更新:

我想我再次阅读了 Django 的 CSRF 文档。

如果您的视图未呈现包含 csrf_token 模板标签的模板,则 Django 可能不会设置 CSRF 令牌 cookie。这在表单被动态添加到页面的情况下很常见。为了解决这种情况,Django 提供了一个视图装饰器来强制设置 cookie:ensure_csrf_cookie()。

如果我不想渲染 Django 模板,这看起来我仍然可以使用 cookie 并将其拉入我的 Backbone 或 jQuery AJAX 方法。我不确定 TastyPie 是否确保发送 cookie 或如何绑定它。

如果我使用 AJAX 注销,cookie 会自动删除还是失效?这些 CSRF 令牌是否对每个用户会话都是唯一的?我明天必须用它测试一些东西。是否可以在 TastyPie 视图上使用 Django 装饰器?

4

1 回答 1

1

移动客户端不关心 Javascript 是来自 Django 还是任何其他 Web 服务器。因此,继续将所有 JavaScript 和静态 HTML 放在另一台服务器上。

如果您希望您的移动应用程序查看用户是否已登录,它应该对您的 Django 后端(请求经过身份验证的地方)进行 AJAX 调用。返回的数据应指示会话是否处于活动状态(用户已登录)。

另一个 AJAX 调用可以执行 Django 注销功能。

于 2013-09-06T05:43:24.360 回答