【问题标题】:Devise session ends after ExtJs ajax request设计会话在 ExtJs ajax 请求后结束
【发布时间】:2011-10-31 10:39:19
【问题描述】:

我将 DeviseRails 3.0.6ExtJS 4.0.6 一起使用。 设计会话在来自 ExtJs 的每个 AJAX 请求后结束。

我浏览了herehere 提供的链接,但没有运气。 可能的解决方法是什么?

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

【问题讨论】:

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


    【解决方案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 编码字符串。注意用户名和密码之间的冒号 (:)。我发现 http://www.webtoolkit.info/javascript-base64.html 的 Base64 库运行良好。

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2016-05-05
      相关资源
      最近更新 更多