2014-11-12 2 views
0

Я пытаюсь использовать аутентификацию Django, но с внешними вызовами веб-службы. Вызовите веб-службу с полезной нагрузкой на имя пользователя и пароль. Есть ли у вас учебник или возможность сделать это? Я пытаюсь с Remote User, но он не работает. Я могу достичь точки, что вызов аутентификации работает, но до сих пор застрял с страницы входаDjango Аутентификация с использованием внешних веб-сервисов

class AppRemoteUserBackend (RemoteUserBackend): 

create_unknown_user = True 

def authenticate (self, **credentials): 
    //getting the user info by webservie call 
    customer = CustomerManagementService.getSelf(credentials) 
    myUser= MyUser() 
    myUser.info= customer 
    myUser.id = customer['id'] 
    myUser.username = credentials['username'] 
    t = myUser.is_authenticated() 

    return myUser 


from django.contrib.auth.models import User 

class MyUser (User): 



objects = None 

username = "" 
info= "" 

def get_group_permissions (self): 

    return [] 

def get_and_delete_messages (self): 

    return [] 

ответ

0

Если вы не хотите использовать рамки REST API, вы можете справиться с базовой аутентификации HTTP таким образом:

Backend код

import base64 
from django.utils.encoding import smart_text, DjangoUnicodeDecodeError 
from django.contrib.auth import authenticate 

def basic_auth(http_request): 

    if 'HTTP_AUTHORIZATION' in http_request.META: 
     authdata = http_request.META['HTTP_AUTHORIZATION'].split() 
     if len(authdata) == 2 and authdata[0].lower() == "basic": 
      try: 
       raw = authdata[1].encode('ascii') 
       auth_parts = base64.b64decode(raw).split(b':') 
      except: 
       return 
      try: 
       uname, passwd = (smart_text(auth_parts[0]), 
           smart_text(auth_parts[1])) 
      except DjangoUnicodeDecodeError: 
       return 

      user = authenticate(username=uname, password=passwd) 
      if user is not None and user.is_active: 
       # We don't user auth.login(http_request, user) because 
       # may be running without session 
       http_request.user = user 
       return True 
    return 

Клиентский код

I использование личных данных Запросы, потому что легко передать учетные данные в полезной нагрузке таким образом:

import requests 
from requests.auth import HTTPBasicAuth 

auth = HTTPBasicAuth("some-username", "some-password") 

res = requests.get("http://my-url", auth=auth)