我正在構建一個使用REST API從服務器上的我的網站加載數據的PhoneGap中構建的簡單應用程序(因爲您無法在PhoneGap中運行PHP)。從CakePHP處理對PhoneGap應用程序的身份驗證
上市的一些數據可能是一個例子:
$.ajax({
url: 'http://myserver.com/posts/index.json',
dataType: 'jsonp',
success: function(data) {
for (var i=0,total=data.length; i<total; i++)
{
console.log(data.Post.title[i]);
}
}
});
這是罰款和返回的數據可以在我的PhoneGap應用程序中使用。然而讓我們說,帖子列表要求您登錄...
我該如何處理?因爲與正常的身份驗證請求不同,它會重定向到登錄表單,在我的JSON世界中,這不會發生。實際上發生的是實際的HTML登錄表單被返回,然後導致錯誤,因爲我的JavaScript期望JSON而不是HTML。
是否有處理此問題的最佳做法,例如,如果要求進行身份驗證,那麼會在PhoneGap應用程序中加載登錄表單視圖,而不是從應用程序返回HTML登錄表單,因爲它目前正在執行該操作?也許通過JSON發送一個auth請求?
舉個例子簡單JSONized方法是這樣的:
public function index() {
$this->set('posts', $this->paginate());
$this->set('_serialize', array('posts'));
}
而且如前所述我可以不傳遞方法的名稱爲$this->Auth->allow()
保護在beforeFilter
此方法。所以我假設我需要在beforeFilter中做一些聰明的事情來知道請求是否是JSON,如果是,那麼檢查該方法是否需要授權,然後如果是這樣,或者發回錯誤(而不是HTML格式,如Cake通過AuthComponent)在JSON中或允許訪問。
更新:2012年1月13日
在這個問題上做一些研究多之後,我看了看Forrst API,因爲他們似乎已經建立有效的什麼,我希望建立一個RESTful的條款API。
例如,他們有一個電話,如:https://forrst.com/api/v2/post/comments?tiny_id=HUD這基本上是說用HUD的微小ID顯示帖子的評論。你將得到的返回是,如果你沒有通過認證的情況如下:
{"resp":{"error":"this method requires authentication"},"stat":"fail","in":0.0903,"authed":false,"authed_as":false,"env":"prod"}
現在最有趣的部分是,即使我登錄到Forrst我仍然會得到錯誤信息,因爲它不是在看我的會議,而該公司預計,一種用於驗證實際請求的令牌。例如?access_token=550e8400-e29b-41d4-a716-446655440000
所以我想這裏的主要問題是,我如何將它建立到我的Cake App中?該計劃如下:
在我的應用程序,它會重定向到登錄頁面,無論你通過AJAX或瀏覽器請求它。 Forrst處理兩者,並且在調用它的API時總是返回JSON錯誤,並且不會返回HTML!這是我想要實現的目標。我爲我的用戶表添加了一個access_token列(出於安全原因,每當有人更新密碼時,該列就會更改)。下一步是A)爲受保護的方法檢查此訪問令牌,並允許或拒絕它是否正確,然後B)當沒有令牌存在或不正確時需要進行一些處理,併發送正確的錯誤狀態而不是HTML登錄形成。
如果我正確理解你,你正在爲Forrst本身構建一個應用程序?或者您是否將Forrst用作您的用戶管理系統?我有Cordova(Phonegap)和CakePHP的經驗,所以我可以幫助你,但這個問題並不是100%清楚。你能分享一個鏈接到你正在使用的確切的API嗎?因爲我能找到關於這個API的唯一信息是https://forrst.com/api,但它似乎是一個訪問他們的帖子的API,而不是一個用戶管理系統。所以我不明白你的第一個使用'myserver.com'的代碼段和'forrst.com'之間的關係。 – Jelmer
對不起,我只是用Forrst作爲我試圖創建的API功能的一個例子。特別是JSON的驗證部分返回。 **我沒有使用任何來自Forrst。** – Cameron
好的,看看我的答案。我希望它能以某種方式幫助你:) – Jelmer