2013-02-10 118 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

相關問題