2010-05-14 162 views
1

我有一個使用mapResources()和parseExtensions()與CakePHP建立和使用的RESTful API。認證由CakePHP的安全組件使用HTTP摘要認證來處理。HTTP摘要身份驗證失敗,使用URL參數(CakePHP)

一切正常,除非我添加URL參數,格式爲:

http://example.com/locations.xml?distance=4 

這會導致身份驗證總是失敗。有任何想法嗎?


編輯: 這似乎是在parseDigestAuthData與正則表達式的問題()。有一個半固定的位置:http://old.nabble.com/paginator-conflicts-with-Security-%3ErequireLogin---td16301573.html現在允許我使用的格式:

http://example.com/locations/index/distance:4/.xml 

但是,這並不是REST風格,不看一切漂亮。儘管如此,靠近!

+0

如果您認爲您可以查看某個URL並聲明「這不是RESTful」,那麼假設您希望獲得RESTful系統的好處,那麼您最好還是多做一些REST閱讀。 – 2010-05-14 12:45:05

+0

我的假設是,在URI中指定某種操作最有可能是錯誤的形式(在這種情況下是索引),並且定義要使用的操作是HTTP動詞的責任。 – NathanGaskin 2010-05-14 16:14:06

+0

url是一個不透明的標識符,如果url中的動詞與所使用的動詞矛盾,那麼開發人員會感到困惑,但實際上並沒有打破任何REST約束。問題出現在請求的行爲與使用的HTTP動詞不一致時。 – 2010-05-14 19:42:08

回答

2

解決:

/cake/libs/controller/components/security.php:386

變化

preg_match_all('@(\w+)=([\'"]?)([a-zA-Z0-9=./\_-]+)\[email protected]', $digest, $match, PREG_SET_ORDER); 

preg_match_all('@(\w+)=([\'"]?)([a-zA-Z0-9=./?&\_-]+)\[email protected]', $digest, $match, PREG_SET_ORDER); 

參數現在可以在傳遞啓用了摘要身份驗證的/locations.xml?key=value形式。