Django rest框架中的客户端身份验证使用django-oauth-toolkit驱动应用程序

时间:2017-12-06 03:51:26

标签: django oauth oauth-2.0 django-rest-framework django-oauth

我正在django为我的移动应用创建一个项目。 django项目是移动应用程序的API后端。我使用django rest框架为用户模型创建了一个注册。注册API工作正常。现在,我想只提供来自我的移动应用程序的请求。为此,我创建了一个oauth应用程序授权授权类型“client-credentials”

fun sumpairs x =

    if null x then []
    else (if (tl x =[]) then x
    else hd x + hd(tl x) :: sumpairs(tl (tl x));

sumpairs([1,2,3]); (I want to test it on this to get something like [3,3])

这是用户序列化程序,视图是

class UserSerializer(ModelSerializer):
email = serializers.EmailField(
        required=True,
        validators=[UniqueValidator(queryset=User.objects.all())]
        )
username = serializers.CharField(
    validators=[UniqueValidator(queryset=User.objects.all())]
    )
password = serializers.CharField(min_length=8)

def create(self, validated_data):
    user = User.objects.create_user(validated_data['username'], validated_data['email'],
         validated_data['password'])
    return user

class Meta:
    model = User
    fields = ('id', 'username', 'email', 'password')
    read_only_fields = ('id',)
    write_only_fields = ('password',)

但问题是我可以在不使用toke的情况下直接调用注册api。如何确保仅在传递令牌时调用User Create API,或者在传递令牌时使post请求有效。

1 个答案:

答案 0 :(得分:1)

您只需使用授权类型客户端凭据创建一个应用程序, 并将您的权限类设置为:

permission_classes = [TokenHasReadWriteScope]

对于需要用户身份验证和授权的其他API,您可以使用授权类型资源所有者密码发布另一个客户端, 并将您的权限类设置为:

permission_classes = [TokenHasReadWriteScope, YourCustomPermission]

或者,如果您同时需要客户端凭据以及资源所有者密码(例如,您的注册API可能只需要客户端凭据,但需要编辑用户的个人信息可能需要基于资源所有者密码的授权)。为此,您可以创建自定义应用程序模型,并允许客户端。 http://django-oauth-toolkit.readthedocs.io/en/latest/advanced_topics.html?highlight=extending%20