0
我不確定我是否正確理解它。我正在使用Django Rest Framework讓用戶登錄(顯然還有很多其他的事情)。在我的情況下,用戶從IOS應用程序登錄後,我想獲取一個令牌並使用該令牌,因此只要令牌有效,它們就只需登錄一次。在Django休息框架登錄後獲取JWT令牌
我得到了兩個部分的工作,使用用戶名或電子郵件登錄和獲取令牌curl工作(如在JWT手冊顯示)。
如何組合這兩個,所以如果登錄成功,在登錄響應之前,我會調用JWT,創建令牌,然後將其返回給登錄響應,並且應用程序將獲得令牌與響應。
我不確定它是否應該這樣做,我想在一次調用API的時候這樣做,而不是兩次。這兩個看起來很簡單,但任何不需要的呼叫都不應該在我眼中完成。
class UserLoginSerializer(ModelSerializer):
user_id = IntegerField(read_only=True)
token = CharField(allow_blank=True, read_only=True)
username = CharField(required=False, allow_blank= True)
email = EmailField(label='Email Address', required=False, allow_blank= True)
class Meta:
model = User
fields = [
'user_id',
'username',
'email',
'password',
'token',
]
extra_kwargs = {"password": {"write_only": True}}
def validate(self, data):
user_obj = None
email = data.get("email", None)
username = data.get("username", None)
password = data["password"]
if not email and not username:
raise ValidationError("A username or email is required to login.")
user = User.objects.filter(
Q(email=email) |
Q(username=username)
).distinct()
user = user.exclude(email__isnull=True).exclude(email__iexact='')
if user.exists() and user.count() == 1:
user_obj = user.first()
else:
raise ValidationError("This username/email is not valid!")
if user_obj:
if not user_obj.check_password(password):
raise ValidationError("Incorrect credentials, please try again!")
data["token"] = "SOME RANDOM TOKEN"
data["user_id"] = user_obj.id
return data
我在數據恢復的道理,所以我需要的是一種方式來獲得從JWT令牌之前,然後返回數據,就像我在這裏做。
感謝
你使用jwt視圖嗎? – arcegk
對不起,我不認爲我理解這個問題....你的意思是Django rest framework JWT?什麼意見? Django有一個名爲「REST框架JWT Auth」的框架,我正在使用它,它爲你實現標記化,稱爲「curl -X POST -d」username = admin&password = abc123「http:// localhost:8000/api-token-auth /「將創建並返回令牌,然後您可以將令牌從客戶端來回發送到服務器......我需要從django rest框架中調用該令牌,而不是在IOS應用程序中創建是一種做到這一點的方法,10倍 – Erez