【发布时间】:2011-10-31 10:39:19
【问题描述】:
我将 Devise 与 Rails 3.0.6 和 ExtJS 4.0.6 一起使用。 设计会话在来自 ExtJs 的每个 AJAX 请求后结束。
我浏览了here 和here 提供的链接,但没有运气。 可能的解决方法是什么?
P.S:给定的代码 here 已经存在于 rails 3.0.6 的 rails.js 中。
【问题讨论】:
标签: ajax ruby-on-rails-3 devise extjs4
我将 Devise 与 Rails 3.0.6 和 ExtJS 4.0.6 一起使用。 设计会话在来自 ExtJs 的每个 AJAX 请求后结束。
我浏览了here 和here 提供的链接,但没有运气。 可能的解决方法是什么?
P.S:给定的代码 here 已经存在于 rails 3.0.6 的 rails.js 中。
【问题讨论】:
标签: ajax ruby-on-rails-3 devise extjs4
我过去所做的是使用 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 编码字符串。注意用户名和密码之间的冒号 (:)。我发现 http://www.webtoolkit.info/javascript-base64.html 的 Base64 库运行良好。
【讨论】: