【问题标题】:Django REST framework - prevent data access for user view?Django REST框架 - 防止用户视图的数据访问?
【发布时间】:2019-05-15 09:33:37
【问题描述】:

在我的 api 中,我有一个 /users 端点,它当前显示当前注册的所有用户的(例如地址)详细信息。这需要由(Ember)应用程序访问(例如查看用户送货地址),但由于显而易见的原因,我不能允许任何人能够查看数据(无论是通过可浏览的 api 还是纯 JSON,如果我们将视图限制为仅使用 JSONRenderer)。我认为我不能使用身份验证和权限,因为应用程序首先需要从前端应用程序(我使用基于令牌的身份验证)登录用户。例如,如果我在 Django 中的用户视图上使用身份验证,我将无法从 Ember 登录。

我错过了什么吗?

更新

你好,我想回来看看这个。

对于 Ember 端的身份验证,我在 Django 中使用 Ember 简单身份验证和基于令牌的身份验证。一切正常 - 我可以登录 Ember 应用程序并访问令牌。

我需要做的是访问用户;为此,我在这里遵循了代码示例https://github.com/simplabs/ember-simple-auth/blob/master/guides/managing-current-user.md

我已经在 Postman 中测试了基于令牌的身份验证,使用我登录用户的令牌 - 并且可以访问 /users 端点。 (这是返回所有用户 - 我想要的只是我要为其返回令牌的用户,但那是以后的事!)。

问题是如何在任何 Ember 请求中传递(令牌)标头,例如

this.store.findAll('user') .... etc 

这显然目前没有发生,我不知道如何解决这个问题。

更新

修复它。原来我的应用程序适配器中的授权函数没有设置标头,因此更改了代码以明确设置标头:

authorize(xhr) {
    let { access_token } = this.get('session.data.authenticated');
    if (isPresent(access_token)) {
        xhr.setRequestHeader('Authorization', `Token ${access_token}`);
    }
},
headers: computed('session.data.authenticated.token', function () {
    const headers = {};
    if (this.session.isAuthenticated) {
        headers['Authorization'] = `Token ${this.session.data.authenticated.token}`
    }
    return headers;
})

【问题讨论】:

    标签: ember.js django-rest-framework


    【解决方案1】:

    Ember 是用于创建 SPA 的框架。这些在浏览器中运行。所以为了让 Ember 获取数据,你必须将数据发送到浏览器。

    浏览器完全在用户的控制之下。浏览器是为他们工作的软件,而不是为网站所有者工作的软件。

    您发送到浏览器的任何数据,用户都可以访问。句号。


    如果您想限制用户可以从 API 读取的数据位,那么您需要编写逻辑来应用这些限制服务器端,而不是依赖于客户端用于过滤掉您不希望用户看到的位的 Ember 代码。


    我认为我不能使用身份验证和权限,因为应用程序首先需要从前端应用程序(我使用基于令牌的身份验证)登录用户。例如,如果我在 Django 中的用户视图上使用身份验证,我将无法从 Ember 登录。

    这真的没有意义。

    一般情况下应该会这样:

    1. 用户将一些凭据输入到 Ember 应用程序中
    2. ember 应用程序将它们发送到服务器上的身份验证端点
    3. 服务器返回一个令牌
    4. ember 应用程序存储令牌
    5. ember 应用在​​从 API 发出数据请求时发送令牌
    6. 服务器使用令牌来确定从 API 发回哪些数据

    【讨论】:

    • 非常感谢您回来。我并不是说这个问题与 Ember 有关。我有它的身份验证方面。问题在于 API 端,(例如)/users 端点使查看该端点的任何人都可以使用潜在的敏感(当然是私有的)信息。我不能限制这个端点,因为初始登录显然不起作用。我考虑的只是从 api 返回用户 ID,然后在登录后在 Ember 中进行必要的 ajax 调用,以获得我需要的私人信息
    • 抱歉澄清一下,身份验证没有问题,没关系。我遇到的问题是,当我登录时,我通过 Ember 中的 /users/1 获取用户。令人担忧的是,如果端点/用户返回敏感信息,任何人都可以查看 - 正如我之前的评论中所述,我将在登录后获得它......不确定这是否是最好的方法实现这一点,但肯定比让任何人查看所有用户信息更好!
    • "我无法限制此端点,因为初始登录显然无法正常工作。" —然后您的初始登录被破坏,您需要按照我在此答案中的描述重新实现它。
    • 对不起 - 我希望我已经清除了,身份验证没有问题,因此初始登录没有问题。在 Django 端进行身份验证的问题是我无法获取我可能需要的用户信息(例如送货地址)。我现在只是要从 Django 返回用户 ID(将保持公开),然后在用户通过身份验证后使用一些调用回 Django。它会起作用的!
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2016-04-23
    • 2015-08-04
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多