В прошлом я выполнял аутентификацию с использованием заголовков аутентификации HTTP.
Вот несколько грубых шагов, которые необходимо выполнить:
В config / initializer / devise.rb установите http_authenticatable
опция конфигурации для true
.
config.http_authenticatable = true
Тогда в вашей панели входа в ExtJS ваша форма будет выглядеть примерно так:
var values = form.getValues();
var encodedCredentialsFromFormFields = Base64.encode(values['username'] + ':' + values['password']);
form.submit({
url: '/users/sign_in',
headers: {
'Accept': 'application/json',
'Authorization': 'Basic ' + encodedCredentialsFromFormFields
},
failure: function(form, action) {
if (action.response.status === 401) { // Unauthorized
console.log('sign in unsuccessful');
} else if (action.response.status === 201) { // Created (as in new session created by Devise)
console.log('sign in successful');
if (! Ext.Ajax.defaultHeaders) {
Ext.Ajax.defaultHeaders = {}
}
Ext.Ajax.defaultHeaders['Authorization'] = 'Basic ' + encodedCredentialsFromFormFields;
} else {
console.log('failed with status: ' + action.response.status);
}
}
});
Переменная encodedCredentialsFromFormFields
Строка в кодировке Base64 в форме «имя пользователя: пароль».Обратите внимание на двоеточие (:) между именем пользователя и паролем.Я обнаружил, что библиотека Base64 из http://www.webtoolkit.info/javascript-base64.html хорошо работает.