2013-02-10 120 views
0

在这里我想验证用户名和密码。这里我得到用户名,密码vlues成功地在控制台(值用户)。 我尝试下面的代码,在javascript中获取错误时,使用摘要验证身份验证用户名和密码

Ext.define('Form.controller.Digestauth', { 
    extend: 'Ext.app.Controller', 
    requires:['RegisterForm.view.Login','RegisterForm.view.Main'], 
    config:{ 
     refs:{ 
      loginform: '#loginform' 
     }, 
     control: { 
      '#loginButton': { 
       tap: function(){ 
        var valuesUser = this.getLoginform().getValues(); 
        console.log(valuesUser); 
        console.log(valuesUser.userName); 
        $.Class("pl.arrowgroup.DigestAuthentication",{ 
         MAX_ATTEMPTS : 1, 
         AUTHORIZATION_HEADER : "Authorization", 
         WWW_AUTHENTICATE_HEADER : 'WWW-Authenticate', 
         NC : "00000001", //currently nc value is fixed it is not incremented 
         HTTP_METHOD : "GET", 
         /** 
           * settings json: 
           * - onSuccess - on success callback 
           * - onFailure - on failure callback 
           * - username - user name 
           * - password - user password 
           * - cnonce - client nonce 
           */ 
         init : function(settings) { 
          this.settings = settings; 
         }, 
         setCredentials: function(username, password){ 
          this.settings.username = valuesUser.username; 
          this.settings.password = valuesUser.userPassword; 
         }, 
         call : function(uri){ 
          this.attempts = 0; 
          this.invokeCall(uri); 
         }, 
         invokeCall: function(uri,authorizationHeader){ 
          var digestAuth = this; 
          $.ajax({ 
           url: uri, 
           uri:'http://localhost/sencha2011/RegisterForm/newuser.php?action=check', 
           type: this.HTTP_METHOD, 
           beforeSend: function(request){ 
            if(typeof authorizationHeader != 'undefined'){ 
             request.setRequestHeader(digestAuth.AUTHORIZATION_HEADER, authorizationHeader); 
            } 
           }, 
           success: function(response) { 
            digestAuth.settings.onSuccess(response); 
           }, 
           error: function(response) { 
            if(digestAuth.attempts == digestAuth.MAX_ATTEMPTS){ 
             digestAuth.settings.onFailure(response); 
             return; 
            } 
            var paramParser = new pl.arrowgroup.HeaderParamsParser(response.getResponseHeader(digestAuth.WWW_AUTHENTICATE_HEADER)); 
            var nonce = paramParser.getParam("nonce"); 
            var realm = paramParser.getParam("realm"); 
            var qop = paramParser.getParam("qop"); 
            var response = digestAuth.calculateResponse(uri, nonce, realm, qop); 
            var authorizationHeaderValue = digestAuth.generateAuthorizationHeader(paramParser.headerValue, response, uri); 
            digestAuth.attempts++; 
            digestAuth.invokeCall(uri, authorizationHeaderValue); 
           } 
          }); 
        }, 
          calculateResponse : function(uri, nonce, realm, qop){ 
           var a2 = this.HTTP_METHOD + ":" + uri; 
           var a2Md5 = hex_md5(a2); 
           var a1Md5 = hex_md5(this.settings.username + ":" + realm + ":" + this.settings.password); 
           var digest = a1Md5 + ":" + nonce + ":" + this.NC + ":" + this.settings.cnonce + ":" + qop + ":" +a2Md5; 
           return hex_md5(digest); 
          }, 
          generateAuthorizationHeader : function(wwwAuthenticationHeader, response, uri){ 
           return wwwAuthenticationHeader+', username="'+this.settings.username+'", uri="'+ 
            uri+'", response="'+response+'", nc='+ 
            this.NC+', cnonce="'+this.settings.cnonce+'"'; 
          } 
        }); 
        $.Class("pl.arrowgroup.HeaderParamsParser",{ 
         init : function(headerValue) { 
          this.headerValue = headerValue; 
          this.headerParams = this.headerValue.split(","); 
         }, 
         getParam: function(paramName){ 
          var paramVal = null; 
          $.each(this.headerParams, function(index, value){ 
           if(value.indexOf(paramName)>0){ 
            paramVal = value.split(paramName+"=")[1]; 
            paramVal = paramVal.substring(1, paramVal.length-1); 
           } 
          }); 
          return paramVal; 
         } 
        }); 
       } 
      } 
     } 
    } 
}); 

写上面的代码,我采取的“http://marcin-michalski.pl/2012/11/01/javascript-digest-authentication-restful-webservice-spring-security-javascript-ajax/”链接消化,auth.js文件帮助

即时得到错误为:未捕获的ReferenceError:$是没有定义。任何人都可以帮助我做到这一点。提前感谢

+0

您需要包含jQuery库。 – JJJ 2013-02-10 06:45:35

+0

这太糟糕了,因为你拥有的代码需要jQuery。从你给的链接:*“下面我将一步一步地介绍为了配置Spring Security和** jQuery **/Ajax客户端需要完成的事情,以调用受保护的资源。”* – JJJ 2013-02-10 06:52:22

+0

嗨,幸运,这是否正常工作为你。如果可以,请发布完整的代码?我对Sencha很陌生,在很多天我都在努力使用摘要式身份验证。 – 2013-02-20 02:55:16

回答

0

您需要包含jQuery。它定义了一个全局的$变量,这就是你的错误所抱怨的。可能从拨打电话$.ajax

查看此处的入门部分:http://docs.jquery.com/

+0

你能告诉我,在我的代码中,我应该在哪里包含jQuery库 – lucky 2013-02-10 07:19:42

+0

它需要在你的html的头部分。 http://learn.jquery.com/about-jquery/how-jquery-works/ – 2013-02-10 08:10:07

+0

不知道那是怎么回事。你可能会问另一个问题的更多细节,有人可能会帮助你。 – 2013-02-12 04:37:16

相关问题