适用于Django的最小Token认证
项目描述
简单的基于Token的认证。
概述
许多人讨论为他们的REST API提供Token认证……但这究竟意味着什么?它有什么好处?
Token是经过加密签名的数据块。在这种情况下,它包含用户ID、后端和签发时的时间戳。
这使得您可以为手机应用、服务等生成和签发Token,而无需处理登录、密码、CSRF等。
安装
将settings.MIDDLEWARE添加到默认认证中间件之后
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'nap_token.middleware.NapTokenMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'cloudselect.middleware.CORSDefeat',
]
使用方法
当您想要登录用户时,调用nap_token.get_auth_token(user),传递从django.contrib.auth.authenticate返回的用户实例。
它将返回一个签名、带时间戳的Token。客户端只需要在请求中传递这个Token作为Authorization头,格式为‘Bearer {token}’,请求就可以代表该用户执行。如果Token不存在、已过期或无效,requset.user将回退到常规基于Session的认证。
签发Token
以下是一个快速简单的示例,说明如何签发Token,这里是一个为可以登录的用户签发Token的方法
from django.http import HttpResponse
from django.contrib.auth.views import LoginView
from nap_token import get_auth_token
class TokenView(LoginView):
def form_valid(self, form):
user = form.get_user()
return HttpResponse(get_auth_token(user))