2017-09-25 4 views
0

Donc les django docs https://docs.djangoproject.com/en/dev/topics/auth/customizing/ sont super mais je suis confus, ce serait génial d'avoir un mentor en ce moment.utilisateur personnalisé auth en django comment brancher

Je veux créer un modèle utilisateur personnalisé et un système d'authentification

the user model will have 
-name 
-password 
-email 
-JWT (javascript web token) 

une des autorisations et un lieu (lieu de divertissement) sera connecté à ce modèle d'utilisateur via un plusieurs à plusieurs via une table d'association.

Voici le problème, même avec les docs, je suis confus comment je remplace l'implémentation en cours de boîte pour l'autorisation.

De plus, je voudrais utiliser https://github.com/GetBlimp/django-rest-framework-jwt

pour l'auth jeton, mais je ne sais pas comment le brancher. Je suppose que je cherche une promenade à travers.

Répondre

0

Si vous voulez supprimer des champs de l'utilisateur intégré, vous devez utiliser ce modèle:

from django.core import validators 
from django.utils.translation import ugettext_lazy as _ 
from django.contrib.auth.models import AbstractBaseUser 
from django.contrib.auth.models import PermissionsMixin 
from django.contrib.auth.models import UserManager 

class User(AbstractBaseUser, PermissionsMixin): 

    username = models.CharField(_('username'), max_length=75, unique=True, 
     help_text=_('Required. 30 characters or fewer. Letters, numbers and ' 
        'underscores characters'), 
     validators=[ 
      validators.RegexValidator(re.compile('^[\w]+$'), 
      _('Enter a valid username.'), 'invalid') 
     ]) 
    first_name = models.CharField(_('first name'), max_length=254, blank=True) 
    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    email = models.EmailField(_('email address'), max_length = 254, unique = True, null = True) 
    is_staff = models.BooleanField(_('staff status'), default=False, 
     help_text=_('Designates whether the user can log into this admin ' 
        'site.')) 
    is_active = models.BooleanField(_('active'), default=True, 
     help_text=_('Designates whether this user should be treated as ' 
        'active. Unselect this instead of deleting accounts.')) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 

    objects = UserManager() 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['first_name'] 

    def get_full_name(self): 
     return self.name 

    def get_short_name(self): 
     return self.username 

Ceci vous permet de personnaliser complètement votre modèle d'utilisateur. Vous pouvez supprimer les champs appropriés. Suivez ensuite les instructions pour configurer djangorestframework-jwt.

0

D'abord, django a intégré l'utilisateur, pour plus de commodité, vous pouvez l'utiliser, si vous avez besoin d'ajouter d'autres champs pour modèle actuel django User:

form django.contrib.auth.models import User 

class MyUser(User): 
    # define your additional custom fields 

après l'installation djangorestframework-JWT faire ce paramètre dans votre settings.py

REST_FRAMEWORK = { 
    ... 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     ... 
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
     ... 
    ), 
} 

JWT_AUTH = { 
    # JWT related settings, see the docs 
} 

en urls.py simplement ajouter ceci:

urlpatterns = [ 
    .... 
    url(r'^api-token-auth/', obtain_jwt_token), 
    ... 
] 

Vous devez d'abord rechercher un jeton, puis parcourir vos autres API:

Effectuez une demande de publication à http://127.0.0.1:8000/api-token-auth/ et fournissez un nom d'utilisateur et un mot de passe pour obtenir votre jeton. Sur les autres demandes, vous devez envoyer ce jeton:

GET http://127.0.0.1:8000/yoururl 
HEADER 
Authorization JWT <YourToken> 

Vous pouvez aller de l'avant avec vos demandes avec boucle, httpie, postier (app chrome) ou tout autre HttpClient

+0

merci beaucoup. Maintenant, en ce qui concerne le plusieurs à plusieurs. J'imagine que je viens de créer cela en utilisant djangos ORM (je suis familier avec plusieurs à plusieurs implémentation) pour les sites et les modèles d'autorisations ... Je pourrais utiliser djangos contenttypes mais c'est une autre boîte de Pandore je préfère rester loin de @Serjik –