我是Ember的新手,我正在尝试通过RESTful API与django服务器通信。到目前为止,我已经设法从服务器获取信息,但如果我尝试发回一些信息,我会收到“CSRF失败:CSRF令牌丢失或不正确”。错误。
在Chrome开发者工具的资源中,我可以看到我没有任何Cookie。我已经读过我应该在我的适配器中使用“X-CSRFToken”:“cookie”,但由于我没有cookie,所以我不知道该怎么做。
所以我走到了尽头...
这是我的代码:
服务器响应:
[{"username":"user1","password":"123","email":"user1@example.com"},
{"username":"user2","password":"456","email":"user2@example.com"}]
Ember模特:
import DS from 'ember-data';
export default DS.Model.extend({
username: DS.attr(),
password: DS.attr(),
email: DS.attr()
});
Ember适配器:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: '/api',
contentType: 'application/json',
dataType: 'json',
headers: {
username: 'XXXX',
password: 'XXXX'
},
buildURL: function(modelName, id, snapshot, requestType, query) {
var url = this._super(modelName, id, snapshot, requestType, query);
return url + "/";
}
});
Ember Serializer:
import DS from 'ember-data';
export default DS.JSONSerializer.extend({
primaryKey: 'username'
});
Ember Route: import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.store.findAll('account');
}
});
Ember控制器:
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
signup(){
console.log('My username is: ', this.get('username'));
console.log('My password is: ', this.get('password'));
console.log('My email is: ', this.get('email'));
var account = this.store.createRecord('account', {
username: this.get('username'),
password: this.get('password'),
email: this.get('email')
});
account.save();
}
}
});
提前感谢您的帮助。
答案 0 :(得分:0)
我解决了我的问题。 问题是我使用的是http://localhost:4200/而不是http://127.0.0.1:4200/,这就是为什么我找不到django的cookie。
一旦我找到了django的cookie,我就会在适配器的标题中添加一个属性。
我的新适配器如下所示:
Ember适配器:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: '/api',
contentType: 'application/json',
dataType: 'json',
headers: {
"X-CSRF-Token": 'django token',
username: 'XXXX',
password: 'XXXX'
},
buildURL: function(modelName, id, snapshot, requestType, query) {
var url = this._super(modelName, id, snapshot, requestType, query);
return url + "/";
}
});