with tutorial instalar framework create python django django-authentication django-rest-framework

python - instalar - django rest framework tutorial



Cómo usar TokenAuthentication para API en django-rest-framework (3)

Tengo un proyecto django, usando django-rest-framework para crear api.

Desea utilizar el sistema de autenticación de token base, por lo que la llamada a la API para (poner, publicar, eliminar) solo se ejecutará para usuarios autorizados.

Instalé ''rest_framework.authtoken'' y creé el token para cada usuario.

Entonces, ahora desde la autenticación de django.contrib.auth.backends, se devuelve user, con auth_token como atributo. (cuando se conecta exitosamente).

Ahora mi pregunta es ¿cómo puedo enviar el token con una solicitud posterior a mi API y al lado de la API cómo puedo verificar si el token es válido y pertenece al usuario correcto?

¿Hay algún método en la aplicación rest_framework.authtoken para validar el usuario dado y su token? No encontré this muy útil!

Actualización (cambios que hice): Agregué esto en mi settings.py:

REST_FRAMEWORK = { ''DEFAULT_AUTHENTICATION_CLASSES'': ( ''rest_framework.authentication.BasicAuthentication'', ''rest_framework.authentication.SessionAuthentication'', ''rest_framework.authentication.TokenAuthentication'', ) }

También estoy enviando Token en mi encabezado pero aún no funciona:

if new_form.is_valid: payload= {"createNewUser": { "users": request.POST["newusers"], "email": request.POST["newemail"] } } headers = {''content-type'' : ''application/json'', ''Authorization'': ''Token 6b929e47f278068fe6ac8235cda09707a3aa7ba1''} r = requests.post(''http://localhost:8000/api/v1.0/user_list'', data=json.dumps(payload), headers=headers, verify=False)


"cómo puedo enviar el token con solicitud de publicación a mi api"

De los documentos ...

Para que los clientes se autentiquen, la clave del token debe incluirse en el encabezado HTTP de autorización. La clave debe estar precedida por el literal de cadena "Token", con espacios en blanco que separan las dos cadenas. Por ejemplo:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

"en el lado de la API, ¿cómo puedo verificar si el token es válido y pertenece al usuario correcto?"

No necesita hacer nada, simplemente acceda a request.user para devolver al usuario autenticado: el marco REST se ocupará de devolver una respuesta ''401 no autorizada'' a cualquier autenticación incorrecta.


Finalmente tengo el paquete django "rest-auth" trabajando para la autenticación de token. Si esto ayuda, aquí está el código jQuery del lado del cliente que funcionó para mí, después de iniciar sesión y recibir el "auth_token":

var user_url = {API URL}/rest-auth/login var auth_headers = { Authorization: ''Token '' + auth_token } var user_ajax_obj = { url : user_url, dataType : ''json'', headers: auth_headers, success : function(data) { console.log(''authorized user returned''); }, error: function(XMLHttpRequest, textStatus, errorThrown) { console.log(''error returned from '' + user_url); } }; $.ajax( user_ajax_obj );


Para contestar la primera mitad de tu pregunta:

¿Cómo puedo enviar el token con una solicitud posterior a mi api?

Puedes usar la biblioteca de requests Python. Para el TokenAuthentication de django-rest-framework, el token debe ser pasado en el encabezado y prefijado por el Token la cadena ( ver aquí ):

import requests mytoken = "4652400bd6c3df8eaa360d26560ab59c81e0a164" myurl = "http://localhost:8000/api/user_list" # A get request (json example): response = requests.get(myurl, headers={''Authorization'': ''Token {}''.format(mytoken)}) data = response.json() # A post request: data = { < your post data >} requests.post(myurl, data=data, headers={''Authorization'': ''Token {}''.format(mytoken)})