2015-09-08 66 views
0

我有一個與我的自定義身份驗證方法(例如,不使用內置Cake3 PasswordHasher盡我所願)連接FriendsOfCake CRUD + JWT的問題。CakePHP 3.x + CRUD + JWT與自定義身份驗證

我儘可能地跟着http://www.bravo-kernel.com/2015/04/how-to-add-jwt-authentication-to-a-cakephp-3-rest-api/,但我的設置不同,我永遠不會通過API註冊用戶,我只需要生成一個用戶名和密碼令牌。

我可以去使用我下面的功能(有一些注意事項)

但我有兩個問題產生的令牌:

1),該怎麼辦與令牌?它似乎沒有被添加到會話中,在令牌發佈之後,我如何在每個請求中包含這些內容?

2)根據布拉沃內核文章標記方法應加UsersController,但是當我這樣做,我得到

"message": "Action \"token\" has not been mapped", 

然後,如果我把它映射到一個CRUD方法,如添加,然後它的工作原理,但它也在我的用戶表中創建一個空行,這真的不是我想要的。

令牌方法是:

public function token() 
{ 
    if($this->request->is('post')) { 


     //returns $user object or false 
     $query = $this->Users->_checkUser($this->request->query); 

     if ($query) { 
      $this->set('data', [ 
       'id' => $query->id, 
       'token' => $token = \JWT::encode(
        [ 
         'id' => $query->id, 
         'exp' => time() + 604800 
        ], 
        Security::salt()) 
      ]); 

      $this->Crud->action()->config('serialize.data', 'data'); 


     } else { 
      throw new UnauthorizedException('Invalid username or password'); 
     } 
    } 
    return $this->Crud->execute(); 
} 

我在努力尋找比上述所以任何提示,以我要去哪裏錯了鏈接之外的任何例子是極大的讚賞:)

回答

1

我只需要針對用戶名和密碼生成一個令牌。

所以你的方法需要驗證憑據,如果有效返回一個令牌作爲迴應。您所鏈接的教程中的方法完全如此。

1)我該如何處理令牌?它似乎沒有被添加到會話中,在令牌發佈之後,我如何在每個請求中包含這些內容?

基於令牌的身份驗證是無狀態的,所以不使用會話,並且客戶端應該保存用於傳遞所有請求的令牌。對於例如您可以使用HTML5的sessionStoragelocalStorage來保存令牌。

但是當我這樣做,我得到"message": "Action \"token\" has not been mapped"

添加其他航線的方法如圖所示here

+0

明白了 - 最後我只是禁用了該動作的CRUD,並讓JSONView爲它返回json,因此它不會創建表格行。 路線的事情是什麼失蹤 - 謝謝:) – Voycey