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

时间:2019-05-15 09:33:37

标签: ember.js django-rest-framework

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

我想念什么吗?

更新

你好,我想再说一遍。

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

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

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

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

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

这显然目前没有发生,我不确定如何解决此问题。

更新

解决了。事实证明,我的应用程序适配器中的authorize函数未设置标头,因此更改了代码以显式设置标头:

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;
})

1 个答案:

答案 0 :(得分:1)

Ember是用于创建SPA的框架。这些在浏览器中运行。因此,要让Ember获取数据,您必须将数据发送到浏览器。

在用户的控制下,浏览器完全。浏览器是适用于他们的软件,不适用于网站所有者。

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


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


  

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

这真的没有道理。

通常,这应该发生:

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