我使用设计与 Rails 3.0.6 和 ExtJS 4.0.6 。 在ExtJs的每个AJAX请求之后,设计会话结束。
我已经查看了here和here给出的链接,但没有运气。 可能的解决方法是什么?
P.S:给定here的代码已经存在于rails 3.0.6中的rails.js中。
答案 0 :(得分:1)
我过去所做的是使用HTTP身份验证标头进行身份验证。
以下是一些粗略的步骤:
在config / initializers / 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编码的字符串,形式为“username:password”。请注意用户名和密码之间的冒号(:)。我发现http://www.webtoolkit.info/javascript-base64.html的Base64库运行良好。