我正在使用 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 装饰器?