django-rest-framework
使用django.contrib.auth
进行身份验证和授权(如django-rest-framework authentication api guide中所述)
但是,文档中没有说明如何使用rest-framework对用户进行实际身份验证
默认情况下,django.contrib.auth
视图将使用服务器端呈现的登录表单进行响应。
但是,如果使用像AngularJs这样的客户端框架,则不需要 - 您只需要一个可以进行身份验证的api端点。
问题:
我是否遗漏了django-rest-framework
文件,解释了如何进行用户身份验证?
是否存在开箱即用的解决方案?
如果没有,推荐的方法是什么才能实现这一目标,同时尽量减少车轮的重新发明?
答案 0 :(得分:0)
假设您有登录视图:
注意:使用此方法,您必须确保SSL / TLS,因为用户名和密码是以纯文本形式发送的。
import json
import requests
def login(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
login_url = 'http://your_url:port/rest-api/login/'
response = requests.post(login_url, data={'username': username, 'password': password})
response = json.loads(response.text)
if response.status_code == 200:
return render_to_response("login.html", {"success": True}, RequestContext(request))
你在rest-api中的观点:
from django.contrib.auth.backends import ModelBackend as DjangoModelBackend
def login(request):
response = base_response.copy()
username = request.DATA.get('username', '')
password = request.DATA.get('password', '')
user = DjangoModelBackend().authenticate(username=email, password=password)
if user is not None:
response["message"] = "Authenticated"
else:
response["message"] = "Login Failed"
return Response(response)
这是ModelBackend的一部分
from django.contrib.auth import get_user_model
class ModelBackend(object):
def authenticate(self, username=None, password=None, **kwargs):
UserModel = get_user_model()
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
user = UserModel._default_manager.get_by_natural_key(username)
if user.check_password(password):
return user
except UserModel.DoesNotExist:
return None
答案 1 :(得分:0)
在API端点进行身份验证时,您通常不会通过登录表单 - 您可以使用API令牌或通过标头发送身份验证凭据,有关如何执行此操作,请参阅How to use Basic Auth with jQuery and AJAX?。 / p>