login - from - django rest knox
django resto framework-cierre de sesiĆ³n de autenticaciĆ³n token (3)
Aquí hay una vista simple que estoy usando para cerrar sesión:
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
class Logout(APIView):
def get(self, request, format=None):
# simply delete the token to force a login
request.user.auth_token.delete()
return Response(status=status.HTTP_200_OK)
Luego urls.py
a tu urls.py
:
urlpatterns = [
...
url(r''^logout/'', Logout.as_view()),
]
He implementado la autenticación de token de acuerdo con los documentos de marco de django resto .
De acuerdo con lo que leí, la autenticación de token de DRF es bastante simple: un token por usuario, el token no caduca y es válido para su uso siempre ( ¿verdad? ).
Entiendo que existen mejores prácticas, pero por ahora la autenticación del token DRF está bien para mí.
Mi pregunta es: ¿cuál es la mejor práctica para cerrar sesión con la autenticación de token DRF normal?
Quiero decir, cuando el usuario cierra la sesión , ¿debo eliminar el token del lado del cliente? y luego en el inicio de sesión obtener el token de nuevo? ¿Debo borrar el token y generar uno nuevo?
¿Alguien con experiencia con esto?
Parece que SessionAuthentication es lo que realmente estás buscando. Puede iniciar (iniciar sesión) una sesión a través de BasicAuthentication o TokenAuthentication. Luego use sessionid como su "token" para el resto de las llamadas a la API. El "token" caduca cuando se desconecta o excede un tiempo determinado.
Si se encuentra con un problema de csrftoken utilizando la autenticación de sesión, this podría ser muy útil.
TODA LA IDEA DE LA AUTENTICACIÓN DE TOKEN:
Normalmente, en los servicios de autenticación, hay una vida útil asociada con un token. Después de un tiempo específico, el token caducará. Aquí, obtenemos un token de acceso que tiene un tiempo de caducidad enviado junto con el servidor. Ahora el cliente debe enviar este token cada vez que se encuentre en el encabezado de la solicitud para que el servidor pueda identificar quién es el usuario. O podemos hacer un seguimiento de cuándo caduca o podemos seguir usándolo hasta que obtengamos un error INVALID_TOKEN
. En ese caso tendríamos que volver a obtener el token del servidor.
La vida útil de access_token es independiente de la sesión de inicio de sesión de un usuario que otorga acceso a un cliente. OAuth2, digamos, no tiene el concepto de un inicio de sesión de usuario o cierre de sesión, o una sesión. El token solo se utiliza para identificar al usuario si él es quien dice ser.
El token es único para un usuario y cliente. Puede guardarlo en las cookies para habilitar algo como recordar, pero en el servidor no es necesario que lo elimine. Cuando el token caduca, el cliente debe enviar una solicitud al servidor para obtener el token nuevamente.
Expiración de token en la autenticación de token de DRF:
Actualmente, la autenticación de token DRF no admite esta funcionalidad. Tendría que implementarlo usted mismo o usar un paquete de terceros que proporcione esta funcionalidad. Debería verificar la caducidad del token y generar una excepción si el token ha caducado.
Para implementarlo usted mismo, puede crear una subclase de la clase de autenticación de token DRF y agregar su lógica.
Incluso puede usar un paquete de terceros django-rest-framework-expiring-tokens .
Algunas referencias:
1. Autenticación de token para la API de REST: ¿se debe cambiar el token periódicamente?
2. ¿Cómo cerrar sesión en una aplicación donde utilicé OAuth2 para iniciar sesión con Google?