2017-09-07 5 views
0

Je cherche à générer un django authtoken pour un objet non-utilisateur. Auparavant, j'avais facilement généré des jetons auth pour les objets utilisateur comme celui-ciCréation d'un jeton d'authentification pour l'objet non-utilisateur django rest framework

email = request.data.get('email') 
user = User.objects.get(email=email) 
Token.objects.create(user=user) 

mais si je suis en train ce pour objet non utilisateur, il ne reçoit pas généré.

device_id = request.data.get('device_id') 
tablet = Table.objects.get(device_id=device_id) 
Token.objects.create(user=tablet) 

La table est un modèle simple qui contient divers device_ids. Je veux juste générer un jeton auth pour chaque tablette comme nous le faisons pour chaque utilisateur.

Répondre

1

Si vous êtes reliant périphériques utilisateurs et besoin d'un jeton « par dispositif », où un utilisateur> 1 périphérique (par exemple bureau, tablette, téléphone, etc.) qui sont enregistrés séparément et où les jetons peut être révoqué, puis regardez à l'Knox App:

Django Knox (https://github.com/James1345/django-rest-knox)


Sinon, les jetons d'authentification sont normalement utilisés pour connecter un utilisateur. Si vous n'avez pas d'utilisateur, ils ne sont pas très utiles en ce qui concerne l'infrastructure standard.

Si vous voulez quelque chose de personnalisé, vous devrez écrire votre propre solution, ce qui pourrait inclure:

  • Un middleware personnalisé si:
    • vous voulez/besoin de définir request.device=, comme request.user
    • vous voulez un objet utilisateur personnalisé (ci-dessous)
  • Décidez si vous voulez un utilisateur « faux » comme DeviceUser
    • Mettre en oeuvre l'interface utilisateur (voir l'exemple de AnonymousUser)
    • a-t-is_authenticated = True
    • dispose d'autorisations (?)
    • a-is_device_user = True pour que vous puissiez distinguer
  • Be vraiment prudent de ne pas compter sur request.user pour avoir un user_id
  • Peut-être une nouvelle classe d'autorisation (par exemple une nouvelle IsAuthenticated)

Le principal problème que je vois est avec des choses qui attendent un objet utilisateur non anonyme (en request) être un utilisateur réel avec un pk. Si vous faites attention, ce n'est peut-être pas un gros problème, mais vous devrez commencer à l'implémenter pour être sûr de son impact sur vous.