2017-09-25 1 views
0

So die Django Docs https://docs.djangoproject.com/en/dev/topics/auth/customizing/ sind groß, aber ich bin verwirrt, wäre es toll, jetzt einen Mentor zu haben.benutzerdefinierte Benutzer Auth in Django, wie man hakt

Ich möchte ein eigenes Benutzermodell und Authentifizierungssystem

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

ein Berechtigungen und ein Veranstaltungsort (Ort der Unterhaltung) zu schaffen, wird über eine viele zu viele Beziehung über eine Zuordnungstabelle zu diesem Benutzermodell verbunden werden.

Hier ist das Problem, auch mit den Dokumenten bin ich verwirrt, wie ich die aktuelle out-of-Box-Implementierung für die Autorisierung überschreiben.

Außerdem würde Ich mag https://github.com/GetBlimp/django-rest-framework-jwt

für die Token-Auth verwenden, aber ich habe keine Ahnung, wie es zu anschließen. Ich schätze, ich suche einen Spaziergang.

Antwort

0

Wenn Sie Felder entfernen möchten aus Für den eingebauten Benutzer sollten Sie dieses Modell verwenden:

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 

Damit können Sie Ihr Benutzermodell vollständig anpassen. Sie können die entsprechenden Felder entfernen. Befolgen Sie dann die Anweisungen zum Einrichten von djangorestframework-jwt.

0

Zunächst einmal hat django integrierte Benutzer, der Einfachheit halber können Sie es verwenden, wenn Sie andere Felder zu aktuellen django User-Modell hinzufügen müssen:

form django.contrib.auth.models import User 

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

nach der Installation von djangorestframework-jwt diese Einstellung tun in Ihrem 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 
} 

in urls.py fügen Sie einfach diese:

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

Jetzt sollten Sie zuerst nach einem Token suchen und dann Ihre anderen APIs durchsuchen:

Führen Sie eine Postanforderung an http://127.0.0.1:8000/api-token-auth/ aus und geben Sie Benutzernamen und Passwort ein, um Ihr Token zu erhalten. Bei anderen Anfragen, sollten Sie dieses Token senden:

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

Sie uns, mit Ihren Wünschen mit Curl gehen, httpie, Postbote (Chrom app) oder jede andere Httpclient

+0

groß danke. Nun zu den vielen zu vielen. Ich stelle mir vor, ich erstelle nur das Verwenden von Djangos ORM (ich bin vertraut mit vielen zu vielen Implementierungen) für die Veranstaltungsorte und Genehmigungsmodelle ... Ich könnte djangos contenttypes verwenden, aber das ist eine andere Dose Würmer, die ich lieber von @Serjik fernbleiben würde –

Verwandte Themen