2016-06-03 6 views
1

Ich möchte nach erfolgreicher Benutzerregistrierung ein Authentifizierungs-Token in Json zurückgeben. Wie kann ich das machen ?Django Rest Framework - Authentifizierungs-Token nach der Registrierung zurückgeben

Für die Registrierung ich die Verwendung folgende

seriazilers.py

class UserSerializer(ModelSerializer): 
    class Meta: 
     model = User 
     fields = [ 
      'id', 
      'username', 
      'password', 
      'email', 
      ] 
     write_only_fields = ('password',) 
     read_only_fields = ('id',) 

    def create(self, validated_data): 
     user = User.objects.create(
      username=validated_data['username'], 
     ) 

     user.set_password(validated_data['password']) 
     user.save() 

     return user 

views.py

class CreateUser(CreateAPIView): 
    queryset = Profile.objects.all() 
    serializer_class = UserSerializer 

Antwort

3

Es gibt viele Möglichkeiten, dies zu tun. Hier ist ein Beispiel im Zusammenhang mit Ihrem bestehenden Code.

+0

Raises Ausnahme - CreateUser Objekt hat keine Attributdaten –

+0

Forgot zum Hinzufügen 'self' zu' serializer'. Jetzt prüfen. –

+0

@AlexeyK können Sie mir Spur zeigen? –

4

Hier ist eine einfache Lösung für den Benutzer, wenn er/sie will einzuloggen/Zeichen -in

zuerst herunterladen django-rest-framework-jwt mit pip

pip install djangorestframework-jwt 

in Ihrem UserSerializer fügen Sie diese der Benutzername und das Passwort, um sicherzustellen, richtig sind (fügen Sie so viele Felder, wie Sie wollen)

username = serializers.CharField(read_only=True) 
password = serializers.CharField(read_only=True) 

Jetzt Ihr in view.py addieren Sie dieses

# authenticate: will check if the user exist 
from django.contrib.auth import authenticate 
# api_settings: will help generating the token 
from rest_framework_jwt.settings import api_settings 

def login_page(request): 
    payload_handler = api_settings.JWT_PAYLOAD_HANDLER 
    encode_handler = api_settings.JWT_ENCODE_HANDLER 
    serializer = UserSerializer(data=request.data) 

    if serializer.is_valid(): 
     user = authenticate(username=request.data['username'], password=request.data['password']) 
     if user: 
      payload = payload_handler(user) 
      token = encode_handler(payload) 

      return Response({'token': token}) 

Und hauptsächlich das ist es! ich hoffe es hilft!

Verwandte Themen