Django REST 框架 - 防止用户视图的数据访问?

Django REST framework - prevent data access for user view?

在我的 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 请求中传递(令牌)header,例如

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

目前显然不会发生这种情况,我不确定如何解决这个问题。

更新

已修复。事实证明,我的应用程序适配器中的授权功能未设置 headers,因此已更改代码以显式设置 headers:

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 是创建 SPA 的框架。这些 运行 在浏览器中。所以为了Ember获取数据,你必须将数据发送到浏览器。

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

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


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


I don't think I can use authentication and permissions, since the application needs to log a user in from the front end app (I am using token based authentication) in the first instance. If I use authentication on the user view in Django for instance, I am unable to login from Ember.

这真的没有意义。

一般来说,这应该会发生:

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