我已經爲CakePHP應用程序構建了一個簡單的測試API,它將允許用戶從移動設備(或任何設備)登錄並獲得JSON響應。此API可用於PhoneGap中構建的移動應用程序。使用Sessions和令牌進行API身份驗證
的登錄方法看起來像這樣:
public function login()
{
if($this->request->is('post'))
{
// Use custom method in Model to find record with password params
$findUser = $this->User->findUser(
$_POST['username_or_email'],
AuthComponent::password($_POST['password'])
);
// If a user exists and matches params
if($findUser)
{
$this->User->id = $findUser['User']['id'];
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('authenticated'=>true,'message'=>__('You have been logged in successfully'))));
}
else
{
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('authenticated'=>false,'message'=>__('Username or password is incorrect'))));
}
}
else
{
$this->autoRender = false;
$this->response->type('json');
$this->response->body(json_encode(array('message'=>'GET request not allowed!')));
}
}
的移動設備(或API的用戶)可以發送自己的登錄信息,然後他們得到的JSON請求爲真或假的認證。 這個布爾值不是用來給用戶的訪問權限,而是告訴移動應用程序他們是否可以看到某些屏幕,並且他們只有獲得數據或者如果會話存在就可以發送數據!
就像剛纔陳述的那樣,它們實際上也是在設備上登錄到API本身,所以如果他們直接訪問網站(來自該設備),他們將會有一個會話並看到相同的JSON響應。
因此,基本上用戶在與服務器通信的設備上的會話持續時間內保持登錄狀態。這與需要爲每個請求傳遞的令牌不同,因爲在此示例中它們具有會話。
現在的問題...
是它的做法對於用戶是壞「實際上」登錄到API 與會話如上所示?它似乎是處理設備身份驗證的最安全方式,因爲它使用與直接Web根相同的邏輯。
我已經看到了一些API使用的訪問令牌,而不是這我也 實現(用戶得到他們的令牌,而不是返回布爾 並沒有創建會話)。但從我可以告訴,這似乎 喜歡更多的工作,然後我需要檢查訪問令牌對 用戶每次請求時記錄。
這是CakePHP的一個很好的REST API插件。也許你可以從https https://github獲得一些指針。com/kvz/cakephp-rest-plugin(它使用令牌與Auth組件結合使用) – 2013-02-21 13:10:07
是的,我以前見過,但我一直在尋找自己開發的東西。但他們也使用'$ this-> Auth-> login()',它實際上將用戶登錄到系統並創建一個會話。 – Cameron 2013-02-21 16:12:19
是的。我正在使用它,但是覆蓋了beforeFilter中的一些功能,以不同的方式使用不同的令牌進行授權,同時仍然保留了插件和CakePHP給我的一些automagick。 – 2013-02-21 18:32:28