gpt4 book ai didi

javascript - 使用 Devise 覆盖 Backbone.sync 以进行 Rails API 身份验证

转载 作者:行者123 更新时间:2023-12-03 11:58:33 75 4
gpt4 key购买 nike

我正在尝试覆盖主干的 .sync 方法,以便为我的 Rails API 提供身份验证。我已经离开了this post我觉得我已经很接近弄清楚了。我已经设置了 rails 侧,但我在前端遇到了麻烦。我被困在另一篇文章中他的部分

var token = YourAppName.csrfToken;

我不太确定用什么来代替“YourAppName”。这是我到目前为止的主干代码。我的应用程序称为“Droppin”,当我将其插入时,我收到错误消息,指出它未定义。

// overide backbone.sync
Backbone._sync = Backbone.sync;

Backbone.sync = function(method, model, options) {
if (!options.noCSRF) {
var beforeSend = options.beforeSend;

// Set X-CSRF-Token HTTP header
options.beforeSend = function(xhr) {
var token = Droppin.csrfToken;
if (token) xhr.setRequestHeader('X-CSRF-Token', token);

// this will include session information in the requests
xhr.withCredentials = true;

if (beforeSend) return beforeSend.apply(this, arguments);
};
}

var complete = options.complete;
options.complete = function(jqXHR, textStatus) {

// If response includes CSRF token we need to remember it
var token = jqXHR.getResponseHeader('X-CSRF-Token')
if (token) Droppin.csrfToken = token;

model.trigger('sync:end');
if (complete) complete(jqXHR, textStatus);
};

// Serialize data, optionally using paramRoot
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
options.contentType = 'application/json';
data = JSON.stringify(options.attrs || model.toJSON(options));
if (model.paramRoot) {
data = {};
data[model.paramRoot] = model.toJSON(options);
} else {
data = model.toJSON();
}
options.data = JSON.stringify(data);
}

return Backbone._sync(method, model, options);
};

我需要做什么才能获取该 CSRF token 并将其正确附加到 HTTP header ?我还应该提到,我正在使用 require.js 并正在 main.js 文件中处理覆盖(不确定这是否是执行此操作的正确位置)。

最佳答案

您是否事先在代码中的其他位置定义了Dropping?例如,

window.Droppin = window.Dropping || {};

如果没有,当您尝试执行 var token = Droppin.csrfToken; Droppin 将是未定义的,因此不会具有属性 csrfToken

关于javascript - 使用 Devise 覆盖 Backbone.sync 以进行 Rails API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497200/

75 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com