在每个 AJAX 请求(Sencha Touch 2)中发送用户详细信息(会话令牌)

Send user details (session token) within every AJAX requests (Sencha Touch 2)

本文关键字:用户 令牌 会话 详细信息 AJAX 请求 Touch Sencha      更新时间:2023-09-26

我正在使用用户特定的数据集构建Sencha Touch 2应用程序。

应用程序的体系结构:

Sencha Touch App <=====> Java Server 后端与 REST Services(许多 AJAX 请求 =) )

我实际拥有的是:

  • 使用用户名/密码登录用户

    应用程序被初始化,日志通知开始发挥作用。将表单作为 AJAX 请求提交后,服务器后端会检查用户数据并调用客户端回调函数。

我想做的是:

  • 回调函数应
    1. 使用会话令牌创建 cookie
    2. 将会话令牌存储在本地存储 (http://docs.sencha.com/touch/2-0/#!/api/Ext.data.proxy.LocalStorage) 中,或
    3. 将会话令牌存储在 JS 变量中

好吧,应该不是问题。

但是我怎样才能做到以下几点:

大多数数据特定于一个用户,如果需要,应由 REST 服务返回(通过单击导航,...)。如何在每个 AJAX 请求中发送会话令牌(见上文) - 以便服务器可以提供合适的数据集(假设令牌有效)?

在 AJAX 请求中发送 Cookie

我已经读过,如果网址在同一空间上,cookie会自动添加到请求中,对吧?Java 服务器位于同一域 (localhost:8080) 上,但 cookie 不可用 - 而不是像 'app.json' 这样的 url 上的请求。我认为跨域请求真的是特定于域的?

在 AJAX 请求中发送参数

因为 cookie 不是 avi,所以我考虑了"手动"向 ajax 请求添加参数的可能性。该应用程序将包含许多 AJAX 请求,这就是为什么我不想手动添加令牌 - 我试图覆盖 Ext.Ajax 的请求功能,但我失败了;-( :

(function() {
    var originalRequest = Ext.data.Connection.prototype.request;
    Ext.override(Ext.data.Connection, {
        request : function(options) {
            alert("Do sth... like add params");
            return originalRequest.apply(this, options);
        }
    });
})();

错误:

未捕获的错误:[错误][Ext.data.Connection#request] 未指定 URL

我还尝试添加侦听器

Ext.Ajax.add({
    listeners : {
        beforerequest :  function( conn, options, eOpts ){
           alert("Do sth... like add params");
        }
     }
});

错误:

未捕获的类型错误:对象 [对象对象] 没有方法"添加"

关于如何添加令牌的任何想法?

或者有更好的方法来处理这些案件?

谢谢!

最后我成功地使用了:

function addAjaxInterceptor(context)
{
   Ext.Ajax.on('beforerequest', function(conn, options, eOptions)
   {
      // add the param to options...
   }, context);
}

从应用程序执行(=> addAjaxInterceptor(this))。

但我认为以下解决方案更适合我的情况:

Ext.Ajax._defaultHeaders = {
    // params as json
};

(因为 Ext.Ajax 是一个单例对象,我不会为每个请求更改参数)