在我的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;
})
答案 0 :(得分:1)
Ember是用于创建SPA的框架。这些在浏览器中运行。因此,要让Ember获取数据,您必须将数据发送到浏览器。
在用户的控制下,浏览器完全。浏览器是适用于他们的软件,不适用于网站所有者。
您发送给浏览器的任何数据,用户都可以访问。句号。
如果要限制用户可以从API读取数据的哪些位,则需要编写逻辑以应用这些限制服务器端,而不要依赖于客户端灰码过滤掉您不希望用户看到的位。
我认为我无法使用身份验证和权限,因为应用程序首先需要从前端应用程序登录用户(我正在使用基于令牌的身份验证)。例如,如果我在Django的用户视图上使用身份验证,则无法从Ember登录。
这真的没有道理。
通常,这应该发生: