好吧,我发现得到使用电子邮件或用户名的身份验证令牌的方式......这是串行:
class AuthCustomTokenSerializer(serializers.Serializer):
email_or_username = serializers.CharField()
password = serializers.CharField()
def validate(self, attrs):
email_or_username = attrs.get('email_or_username')
password = attrs.get('password')
if email_or_username and password:
# Check if user sent email
if validateEmail(email_or_username):
user_request = get_object_or_404(
User,
email=email_or_username,
)
email_or_username = user_request.username
user = authenticate(username=email_or_username, password=password)
if user:
if not user.is_active:
msg = _('User account is disabled.')
raise exceptions.ValidationError(msg)
else:
msg = _('Unable to log in with provided credentials.')
raise exceptions.ValidationError(msg)
else:
msg = _('Must include "email or username" and "password"')
raise exceptions.ValidationError(msg)
attrs['user'] = user
return attrs
在EMAIL_OR_USERNAME领域,用户可以发送电子邮件或用户名,使用功能validateEmail(),我们可以检查用户是否尝试使用电子邮件或用户名登录。然后,我们可以查询获取用户实例是否有效,并对其进行身份验证。
这是视图。
class ObtainAuthToken(APIView):
throttle_classes =()
permission_classes =()
parser_classes = (
parsers.FormParser,
parsers.MultiPartParser,
parsers.JSONParser,
)
renderer_classes = (renderers.JSONRenderer,)
def post(self, request):
serializer = AuthCustomTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token, created = Token.objects.get_or_create(user=user)
content = {
'token': unicode(token.key),
}
return Response(content)
然后:
curl --data "email_or_username=emailorusername&password=password" http://127.0.0.1:8000/api/my-api-token-auth/.
这是准备好了。
哟哟你的应用程序已经有使用电子邮件和密码登录的方法吗?或者这是您为应用程序实施的第一种身份验证方法? – 2015-01-21 02:02:57
嗨...是第一种身份验证方法,我以前没有实现过其他...现在我使用默认的获取令牌方法,使用用户名和密码......但是,在移动设备中,我需要获取令牌使用电子邮件和密码验证。 – 2015-01-21 02:07:03