如果您真的真的很想创建自己的解决方案。这是我在 oAuth 时代之前的旧错误解决方案。
- 创建使用用户名/密码成功登录后返回一些密钥的视图,并将生成的 access_key 添加到数据库
检查请求中的密钥 => 如果数据库中存在 => 登录
#pseudo code
#view
from django.contrib.auth import authenticate, login
def get_my_token(request, username, password):
user = authenticate(username, password)
if user is not None:
login(request,user)
#first should check has access_key
try:
return UserAuth.objects.filter(user=user).access_key
except:
pass
access_key = 'somecrazy_random_unique_number'
user_auth = UserAuth()
user_auth.user = user
user_auth.access_key = access_key
user_auth.save()
return access_key
现在您可以将 access_key 保存在某处,并将作为标题“access_key_or_any_other_name”添加到每次调用休息资源时。创建身份验证中间件,而不是身份验证后端。
#auth_middelware
class StupidNoAuthMid(object):
def process_request(self, request):
access_key = reuest.META['access_key_or_any_other_name']:
try:
user = UserAuth.objects.filter(access_key=acces_key).user
auth.login(request, user)
except:
pass
你不想重新发明轮子。使用 oAauth,您可以保存 access_token 以备将来使用。