У моего сервера есть авторизация вручную. Мне нужно указать имя пользователя/пароль моего сервера на мой основной запрос, чтобы он прошел. Как я могу это сделать? Есть идеи? Спасибо вам
Добавить заголовок запроса на магистраль
Ответ 1
Модели в Backbone извлекают, обновляют и уничтожают данные с помощью методов fetch, save и destroy. Эти методы делегируют фактическую часть запроса на Backbone.sync. Под капотом все Backbone.sync делает это, создавая запрос ajax, используя jQuery. Чтобы включить базовую HTTP-аутентификацию, у вас есть несколько вариантов.
 fetch, save и destroy все принимают дополнительный параметр [options]. Эти [options] - это просто словарь параметров запроса jQuery, которые включаются в jQuery ajax-вызов, который выполняется. Это означает, что вы можете легко определить простой метод, который добавляет аутентификацию:
sendAuthentication = function (xhr) {
  var user = "myusername";// your actual username
  var pass = "mypassword";// your actual password
  var token = user.concat(":", pass);
  xhr.setRequestHeader('Authorization', ("Basic ".concat(btoa(token))));
}
И включите его в каждый вызов fetch, save и destroy. Например:
 fetch({
  beforeSend: sendAuthentication 
 });
Это может создать довольно много повторений. Другим вариантом может быть переопределить метод Backbone.sync, скопировать исходный код и просто включить параметр beforeSend в каждый сделанный запрос jQuery ajax.
Надеюсь, это поможет!
Ответ 2
Самый простой способ добавить заголовок запроса в Backbone.js - просто передать их методу выборки в качестве параметров, например.
MyCollection.fetch( { headers: {'Authorization' :'Basic USERNAME:PASSWORD'} } );
		Ответ 3
Одним из вариантов может быть использование jQuery ajaxSetup, все запросы Backbone в конечном итоге будут использовать базовый jQuery ajax. Преимущество этого подхода состоит в том, что вам нужно добавить только одно место.
$.ajaxSetup({
    headers: { 'Authorization' :'Basic USERNAME:PASSWORD' }
});
		Ответ 4
Вы можете переопределить метод базовой линии.
#coffeescript
_sync = Backbone.sync
Backbone.sync = (method, model, options) ->
    options.beforeSend = (xhr) ->
        xhr.setRequestHeader('X-Auth-Token_or_other_header' , your_hash_key)
        #make sure your server accepts X-Auth-Token_or_other_header!!
    #calling the original sync function so we only overriding what we need
    _sync.call( this, method, model, options )       
		Ответ 5
Backbone.$.ajaxSetup({
    headers: {'Authorization' :'Basic USERNAME:PASSWORD'}
});
Этот код устанавливает заголовки в Backbone ajax, поэтому они будут отправляться с каждым Backbone.sync. Вы можете отправлять заголовки без использования xhr.setRequestHeader с каждым вызовом синхронизации.
Поэтому вам не нужно делать следующее каждый раз:
MyCollection.fetch({ headers: {'Authorization' :'Basic USERNAME:PASSWORD'} } );
Вы можете просто сделать
MyCollection.fetch();
Возможно, это взломать, но он отлично работает для моей системы.
Ответ 6
Мой подход к чему-то подобному будет перезаписывать метод синхронизации, чтобы добавить заголовок перед выполнением запроса.
В этом примере вы можете увидеть, что я создаю Backbone.AuthenticatedModel, который простирается от Backbone.Model.
Это повлияет на все методы (GET, POST, DELETE и т.д.)
Backbone.AuthenticatedModel = Backbone.Model.extend({
    sync: function(method, collection, options){
        options = options || {};
        options.beforeSend = function (xhr) {
            var user = "myusername";// your actual username
            var pass = "mypassword";// your actual password
            var token = user.concat(":", pass);
            xhr.setRequestHeader('Authorization', ("Basic ".concat(btoa(token))));
        };
        return Backbone.Model.prototype.sync.apply(this, arguments);
    }
});
Затем вам нужно просто расширить модель, требующую аутентификации, из созданного Backbone.AuthenticatedModel:
var Process = Backbone.AuthenticatedModel.extend({
    url: '/api/process',
});
		Ответ 7
Object.save(
  {'used': true}
  {headers: {'Access-Token': 'access_token'}}
)
		Ответ 8
Создайте собственный метод синхронизации, который перехватывает вызовы Backbone.sync и загружает ваши заголовки авторизации и передает все остальное через:
    REPORTING_API_KEY = 'secretKeyHere';
    CustomSync = function(method, model, options) {
        options.headers = {
            'Authorization' : 'Bearer ' + REPORTING_API_KEY
        };
        return Backbone.sync(method, model, options);
    };
Затем перезапишите синхронизацию модели с этим:
    MyModel = Backbone.Model.extend({
        urlRoot: '/api/',
        sync: CustomSync
    });
		Ответ 9
-  
На стороне клиента добавьте это перед любой связью сервера:
$.ajaxSetup({ xhrFields: { withCredentials: true }, async: true }); -  
На стороне сервера добавьте эти заголовки (PHP):
header('Access-Control-Allow-Origin: http://your-client-app-domain'); header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With"); header('Access-Control-Allow-Credentials: true');