我使用REST API的django-tastypie和身份验证的ApiKeyAuthentication。我在api.py中有一个用于创建新用户的CreateUserResource。现在,在所有教程中都指定了,无论何时完成任何GET或POST请求,都必须指定apikey。但是客户端如何接收这个apikey呢?
在登录时,客户端是否需要进行身份验证,并提供一个apikey,当客户端注销时该out将被撤销?
发布于 2017-03-21 19:25:23
在后台使用Tastypie实现单页app的基本鉴权:
此类身份验证资源可能如下所示:
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from tastypie.http import HttpUnauthorized, HttpForbidden, HttpNotFound
from tastypie.authentication import ApiKeyAuthentication
from django.conf.urls import url
from tastypie.resources import ModelResource
from tastypie.utils import trailing_slash
class AuthenticationResource(ModelResource):
def __get_api_key_for_user(self, user):
return '%s' % (user.api_key.key)
class Meta:
resource_name = 'authentication'
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/login%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('login'), name="api_login"),
]
def login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))
username = data.get('username', '')
password = data.get('password', '')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
last_login = user.last_login
login(request, user) // updates the last login
return self.create_response(request, {
'api_key': self.__get_api_key_for_user(user),
'last_login': last_login,
'username': username
})
else:
return self.create_response(request, {
'success': False,
'reason': 'disabled',
}, HttpForbidden )
else:
return self.create_response(request, {
'success': False,
'reason': 'Incorrect user name or password',
}, HttpUnauthorized )https://stackoverflow.com/questions/30645943
复制相似问题