auth возвращается как none при попытке войти в систему пользователя при регистрации - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь решить тот случай использования, когда пользователь регистрируется, тогда пользователь автоматически входит в систему и возвращает токен этого пользователя, чтобы я мог получить этот токен в файлах cookie из внешнего интерфейса.Тем не менее, я получаю вопрос "Email already registered".когда я отлаживал свой код с помощью pdb, я обнаружил, что auth = authenticate(username=email, password=password) возвращает None.

Как я могу аутентифицировать пользователя во время регистрации и передать токен этого пользователя?

Вот как я делаю

class Register(graphene.Mutation):
    '''
        Mutation to register a user
    '''
    class Arguments:
        email = graphene.String(required=True)
        password = graphene.String(required=True)
        password_repeat = graphene.String(required=True)

    success = graphene.Boolean()
    errors = graphene.List(graphene.String)
    email = graphene.String()

    def mutate(self, info, email, password, password_repeat):
        if password == password_repeat:
            try:
                serializer = RegistrationSerializer(data={
                    'email': email,
                    'password': password,
                    'is_active': False
                })
                if serializer.is_valid():
                    user = serializer.save()
                    auth = authenticate(username=email, password=password)
                    import pdb
                    pdb.set_trace()
                    # login user and pass the token
                    login(info.context, auth)
                    return Register(success=bool(user.id), email=user.email)
                else:
                    print("error", serializer.errors)
            except Exception:
                errors = ["email", "Email already registered"]
                return Register(success=False, errors=errors)
            errors = ["password", "Passwords don't match."]
            return Register(success=False, errors=errors)


class Login(graphene.Mutation):
    """
    Mutation to login a user
    """
    class Arguments:
        email = graphene.String(required=True)
        password = graphene.String(required=True)

    success = graphene.Boolean()
    errors = graphene.List(graphene.String)
    token = graphene.String()
    user = graphene.Field(UserQuery)

    def mutate(self, info, email, password):
        user = {'email': email, 'password': password}
        serializer = JSONWebTokenSerializer(data=user)
        if serializer.is_valid():
            token = serializer.object['token']
            user = serializer.object['user']
            print('user', user)
            return Login(success=True, user=user, token=token)
        else:
            print("serializers errors", serializer.errors)
            return Login(
                success=False,
                token=None,
                errors=['email', 'Unable to login with provided credentials.']
            )

RegistrationSerializer

class RegistrationSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'email', 'is_active', 'password', )

    def create(self, validated_data):
        print("validated_data", validated_data)
        user = User.objects.create(**validated_data)
        user.set_password(validated_data['password'])
        user.save()
        return user

Я использую graphql вместо REST API и использую graphene-django для graphql.

...