2014-10-14 6 views
0

django-rest-framework использует django.contrib.auth для аутентификации и авторизации (как указано в django-rest-framework authentication api guide)Как использовать django.contrib.auth с django-rest-framework?

Однако ни-где в документации не сказано говорить о том, как пользователи на самом деле проверку подлинности с помощью покоя рамки

По умолчанию django.contrib.auth отобразит ответную форму для входа в систему на стороне сервера.

Однако, если вы используете инфраструктуру на стороне клиента, такую ​​как AngularJs, это нежелательно - вам просто нужна конечная точка api, против которой вы можете аутентифицироваться.

Вопросы:

  • Есть django-rest-framework документация Я как-то недостающее, который объясняет, как это делается-из-табакерки аутентификации пользователя?

  • Существует ли существующее решение?

  • Если нет, то каков рекомендуемый способ достижения этого с минимальным переосмыслением колеса?

+0

Возможный дубликат [Как использовать Basic Auth и JQuery и Ajax] (http://stackoverflow.com/questions/5507234/how-to-use-basic-auth-and-jquery-and-ajax) –

ответ

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)) 

Ваше мнение в покое-апи:

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 
0

Вы обычно не проходят через формы ввода пароля при проверке подлинности на себя API endpoint - вы либо используете токен API, либо отправляете учетные данные аутентификации через заголовок, см. How to use Basic Auth with jQuery and AJAX? о том, как это сделать.

Смежные вопросы