在ExtJs ajax请求之后,设计会话结束

时间:2011-10-31 10:39:20

标签: ajax ruby-on-rails-3 devise extjs4

我使用设计 Rails 3.0.6 ExtJS 4.0.6 。  在ExtJs的每个AJAX请求之后,设计会话结束。

我已经查看了herehere给出的链接,但没有运气。  可能的解决方法是什么?

P.S:给定here的代码已经存在于rails 3.0.6中的rails.js中。

1 个答案:

答案 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库运行良好。