首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django rest框架支持的应用程序中使用django-oauth工具包的客户端身份验证

Django rest框架支持的应用程序中使用django-oauth工具包的客户端身份验证
EN

Stack Overflow用户
提问于 2017-12-06 03:51:26
回答 1查看 684关注 0票数 2

我在django为我的移动应用程序创建一个项目。django项目是移动应用程序的API后端。我已经使用django rest框架为用户模型创建了一个注册。注册API运行良好。现在,我只想让我的手机应用程序的请求得到满足。为此,我创建了oauth应用程序授权授予类型“客户端凭据”

代码语言:javascript
复制
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',)

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

代码语言:javascript
复制
class UserCreateAPIView(CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (IsAuthenticatedOrCreate, TokenHasScope)

但问题是,我可以直接调用注册api而不用toke。如何确保只在传递令牌时调用用户Create,或者在传递令牌时post请求有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-03 09:58:41

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

代码语言:javascript
复制
permission_classes = [TokenHasReadWriteScope]

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

代码语言:javascript
复制
permission_classes = [TokenHasReadWriteScope, YourCustomPermission]

或者,如果您同时需要客户端凭据以及基于资源所有者密码的(例如,您的注册api可能只需要客户端凭据,但是编辑用户的个人信息可能需要基于资源所有者密码的授权)。为此,您可以为客户端创建自定义应用程序模型,并允许两者都使用。topics.html?highlight=extending%20

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47666498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档