我正在使用api构建一个Django Web应用程序,该应用程序使用基于令牌的身份验证,而不是基于会话的身份验证。 api既可以通过Web应用程序的前端消耗,也可以通过单独的移动应用程序消耗。我很难搞清楚如何登录。我的第一个想法就是做我打算在移动应用程序中做的事情:登录表单只是POST到创建并发送回访问令牌的端点,然后访问令牌保存在浏览器/应用程序存储中发送以及未来的请求。这似乎在移动应用程序的上下文中是有意义的,但使用浏览器似乎有点奇怪。这种方法的一个问题是即使在注销后内部页面仍然可见。用户可以注销,然后点击后退按钮,只需浏览网站即可。即使所有的api调用都会失败,它们的静态内容仍然会被提供。
在我看来,不同之处在于,在移动应用中,只需要api调用进行身份验证,因为静态内容已经在设备上,不需要获取。但是,在Web应用程序中,需要提供静态内容,如果用户未登录,则可能不应该这样做。
仅使用基于令牌的身份验证是不常见的吗?我是否需要对静态内容使用基于会话的身份验证,以及对api使用基于令牌的身份验证?
这通常是怎么做的?
编辑:我正在使用django-rest-framework,因此使用它的一种简单方法也可以用。
答案 0 :(得分:1)
连接您的JS API调用,以便身份验证失败会将当前页面重定向回登录页面。
$http({url: "/api/v1/thing"})
.success(function(data, status, headers, config) {
// Do something
})
.failure(function(data, status, headers, config) {
if (status == 403) {
window.location.href = "/login/?next="+window.location.href
}
})