我正在向你展示它现在对我有用的代码。它不是最安全但是工作但我想用POST方法做。任何想法如何改变它?
我有一个serializer.py类
class userLoginSerializer(serializers.ModelSerializer):
class Meta:
model = users
fields = ('nick', 'pass_field')
@api_view(['GET'])
def user_login(request,nick,pass_field):
但是当我发送了2个值nick和passfield时,它表示该缺口已经存在并返回404,因为它将它传递给serializers.errors。我只需要使用POST传递代码并验证它是否存在并返回成功的JSON。下面的代码有效但不是最好的实现。
if request.method == 'GET':
try:
users.objects.get(nick=nick,pass_field=pass_field)
json = {}
json['message'] = 'success'
return Response(json, status=status.HTTP_201_CREATED)
except users.DoesNotExist:
json = {}
json['message'] = 'error'
return Response(json, status=status.HTTP_400_BAD_REQUEST)
答案 0 :(得分:0)
模特是用户还是用户?你为什么不使用Django用户模型?
类User已经有一个check_password方法并使用哈希算法存储它:https://docs.djangoproject.com/en/dev/ref/contrib/auth/#methods 永远不要以明文形式存储密码,这是非常不安全的。
使用Django User模型(或从中继承的类),您只需检查它是否有效:
try:
user = User.objects.get(username=nick)
if user.check_password(pass_field):
#TODO: Valid password, insert your code here
else:
#TODO: Password not valid, handle it here
pass
except User.DoesNotExist:
#TODO: Your error handler goes here
pass
您可以做的另一件事是从ApiView继承并在发布方法中实现您的代码:http://www.django-rest-framework.org/api-guide/views
答案 1 :(得分:0)
我实现了一种使用JWT登录的方法,它的作用是:
假设请求为{“ email”:“ xyz@gmail.com”,“ password”:“ 12345”}
minio.error.SignatureDoesNotMatch: SignatureDoesNotMatch: message: The request signature we calculated does not match the signature you provided.