2015-05-25 27 views
0

我對Angular有些不滿意,並且在嘗試發佈到Drupal服務端點時遇到問題。我可以用HttpRequester(FFox插件)發佈,但是我所有使用Angular發佈數據以獲得會話的嘗試都會導致401 Unauthorized:缺少必需的參數用戶名或其他錯誤。

這裏是我的測試工廠資源與默認輸入:

userInfoApp.factory('LoginService', function($resource) { 
     return $resource('/auth-service/user/login', {username: 'admin', password: 'admin'}, { 
     update: { 
      method: 'POST', // this method issues a POST request 
      headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
     } 
     }); 
    }); 

這裏是我正在給它的控制器內部通話(這樣):

this.login = function() { 
     var login = LoginService.update(function(data) { 
     console.log(data); 
     }); 
    }; 

到目前爲止,這通常會導致像這樣生成的查詢字符串:

http://project.loc/auth-service/user/login?password=admin&username=admin

和響應:

401未經授權:缺少必需的參數的用戶名

什麼可能我做錯了嗎?我已經獲得了$ resource來與其他端點一起工作(比如菜單服務來檢索菜單),但發佈似乎更加挑剔。任何建議,將不勝感激。

感謝

+0

你的$資源配置似乎是使用POST方法..你的URL有查詢字符串?你能檢查你的Drupal服務端點是否可以得到這些參數嗎?我相信你的Drupal服務調試不會得到參數! –

+0

沒有服務不能獲得參數。事實上,我不希望它。我希望POST能夠真正發佈。登錄不應該發生在查詢字符串上。 –

回答

2

好吧,我發現了一個可行的辦法;對於控制器功能:

this.login = function() { 
     var data = { 
     username: this.username, 
     password: this.password 
     }; 
     var login = LoginService.save({}, data, 
     function(data) { 
      // possibly do stuff with result 
     }, 
     function(reply) { 
      // Comments on best way to access $scope here are welcome. 
      // This feels a bit weird to me. 
      $scope.info.errorMessage = reply.statusText; 
     } 
    ); 
    }; 

與出廠服務:

 // Login factory service 
     userInfoApp.factory('LoginService', function($resource) { 
     return $resource('/auth-service/user/login'); 
     }); 

這實際上從服務器檢索會話ID和其他用戶的數據。

2

您的$資源當前配置將用戶名&密碼作爲查詢字符串。因此它們出現在您的網址中。我假設你需要這些值爲POST。

根據單證所有非GET方法已經在action方法有效載荷參數:

非GET 「類」 動作:Resource.action([參數],POSTDATA, [成功],[錯誤])

你需要做的是停止發送參數默認[parameters]和利用postData的POST數據到您的Drupal服務端點什麼。你可以這樣做,當你調用$update()爲:

LoginService.update({}, {username: "admin",password: "admin"}); 
+0

對不起,這沒有做到。將服務調用更改爲:this.login = function(){var login = LoginService.update({},{username:「admin」,password:「admin」}); };它沒有影響。 –

相關問題