5

のために有効ではありません、私は残り-AUTHを使用しようとしています(ヘッダと*)GETしserialisersを供給ユーザの詳細に定義endpoint /残り-AUTH /ユーザーから/フィールド名が `username`モデル

(*付きヘッダ (Content-Typeの:アプリケーション/ JSON 認証:トークン1a5472b2af03fc0e9de31fc0fc6dd81583087523 ))

私は、次のトレースバックになっています:https://dpaste.de/oYay#L

を私のようなユーザ名とパスワードではなく、電子メールを使用してカスタム・ユーザー・モデルを()が定義されています:

class UserManager(BaseUserManager): 
def create_user(self, email, password, **kwargs): 
    user = self.model(
     # lower-cases the host name of the email address 
     # (everything right of the @) to avoid case clashes 
     email=self.normalize_email(email), 
     is_active=True, 
     **kwargs 
    ) 
    user.set_password(password) 
    user.save(using=self._db) 
    return user 

def create_superuser(self, email, password, **kwargs): 
    user = self.model(
     email=email, 
     is_staff=True, 
     is_superuser=True, 
     is_active=True, 
     **kwargs 
    ) 
    user.set_password(password) 
    user.save(using=self._db) 
    return user 


class MyUser(AbstractBaseUser, PermissionsMixin): 
    USERNAME_FIELD = 'email' 

    email = models.EmailField(unique=True) 

設定を次のように

AUTH_USER_MODEL = 'users.MyUser' 
ACCOUNT_USER_MODEL_USERNAME_FIELD = None 
# Config to make the registration email only 
ACCOUNT_EMAIL_REQUIRED = True 
ACCOUNT_UNIQUE_EMAIL = True 
ACCOUNT_EMAIL_VERIFICATION = 'optional' 
ACCOUNT_USERNAME_REQUIRED = False 
ACCOUNT_AUTHENTICATION_METHOD = 'email' 
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 

それは残り-AUTH serialisersに準拠するように..この誤差を補正については移動する方法がわかりません。ジャンゴ休止-AUTHで

答えて

8

、彼らは、ユーザーモデル

つまり、デフォルトのdefaul・シリアライザを持っています。

USER_DETAILS_SERIALIZER = 'rest_auth.views.UserDetailsView' 

そして、ここで彼らは、カスタム・ユーザー・モデルを使用していると、あなたのモデルでusernamフィールドを持っていないので、フィールドをシリアライズしようとしたときに、それがエラーを与えている、あなたの場合はdjang.contrib.auth.User

をシリアル化していますユーザー名。 だから、あなたはUserモデルのためのシリアライザを書いて、あなたの設定にパスを追加する必要があります。

例:settings.py

USER_DETAILS_SERIALIZER = CustomUserDetailsSerializer 
+3

class CustomUserDetailsSerializer(serializers.ModelSerializer): class Meta: model = MyUser fields = ('email',) read_only_fields = ('email',) 

このソリューションは、ちょうど、私のためにうまく働きました将来の参照のために答えを改善するための詳細: 'REST_AUTH_SERIALIZERS = { 'USER_DETAILS_SERIALIZER': 'users.serializers.CustomUserDetailsSエリアライザ ' } ' – Anon957

関連する問題