J'utilise l'authentification basée sur Django Token. (JWT Token est généré par un tiers comme AWS Cognito, nous allons simplement vérifier la signature et l'heure d'expiration).Authentification par jeton Django sans modèle d'utilisateur
Cette application REST ne comportera aucun modèle utilisateur. Celui qui utilise les appels d'API doit être authentifié uniquement par le jeton JWT.
class JSONWebTokenAuthentication(TokenAuthentication):
def authenticate_credentials(self, jwtToken):
try:
payload = jwt.decode(jwtToken, secret_key,verify=True)
# user = User.objects.get(username='root')
user = AnonymousUser()
except (jwt.DecodeError, User.DoesNotExist):
raise exceptions.AuthenticationFailed('Invalid token)
except jwt.ExpiredSignatureError:
raise exceptions.AuthenticationFailed('Token has expired')
return (user, payload)
Vues:
@api_view(["POST"])
@authentication_classes((JSONWebTokenAuthentication,))
@permission_classes((AllowAny,))
processus ci-dessus, ne garde pas trace de jeton du tout. Avec/sans jeton, les appels APi fonctionnent. Si je fais ci-dessous deux changements, cela fonctionne.
user = User.objects.get(username='root')
#user = AnonymousUser()
@permission_classes((IsAuthenticated,))
Une façon de le faire est, d'avoir atleast un utilisateur dans mon application et référence utilisateur [Cette webapp peut évoluer à un certain nombre de cas en cas de besoin, afin d'insérer le même utilisateur avec la même « nom d'utilisateur » a être automatisé. ] Mais au lieu de cela, puis-je éliminer le concept "Utilisateur" dans l'authentification?
Merci. Cela a fonctionné comme une solution de contournement pour moi. Lorsque j'utilise des outils tiers comme AWS cognito, je crois que nous ne devrions pas nous préoccuper du modèle d'utilisateur Django. –