2013-12-09 97 views
0

我正在尋找一些關於如何爲我的應用程序創建安全身份驗證/授權模型的建議。我正在爲CakePHP編寫此代碼,但希望能夠將此模型應用於任何應用程序。如果我能得到關於我的模型的意見以及如何使它更好,我會非常感激。這是我有:創建安全身份驗證/授權模型

,我要保護每個視圖具有下面的代碼是它的控制器:

$getUser= $this->Session->read('get_logged_user'); 
if($getUser == null){ 
      //no credentials, redirect 
      $this->render('../Elements/User/login'); 

     }else{ 
      if($getUser->isAuthenticated==false){ 
       //not authenticated 
       $this->render('../Elements/User/login'); 
      }else{ 
       //its ok, show the page. if needs to check roles, iterate of the roles array 
     } 
     } 

從本質上講,我檢查,看看是否正確的會話可用。如果沒有,他們從不登錄,因此重定向到登錄頁面。如果是這樣,請檢查授權。我的會話是由以下內容組成的類:名/姓,用戶名,角色數組和isAuthenticated布爾值。當用戶登錄到我的應用程序時,此對象被創建並投入會話。該類對數據庫進行身份驗證,並將用戶的所有重要信息(名稱,角色等)撤回。應用可以進一步使用角色來確定用戶可以看到和看不到的內容以及與之交互的內容。當用戶點擊「註銷」按鈕時,會話對象被破壞。

此方法是否安全?我還應該使用令牌還是什麼?如果需要更多代碼,請告訴我,我可以發佈它。我知道cakePhp有一個安全插件,但我寧願從頭創建自己的。

謝謝!

+2

建議 - 不要從頭創建自己的。認證是一件嚴肅的事情 - 讓專家們來源推廣它。不要聽起來居高臨下,但如果你不能自己做出這些簡單的決定,那麼你還沒有足夠的知識來製作你自己的。只要學習好的學習 – jmadsen

+0

你好,我感謝你的關注,但我寫這是爲了我自己的個人知識。我想了解更多關於創建安全應用程序的信息,並認爲創建我自己的模型會比使用罐裝解決方案更有用。 – jason

+0

這很好聽 - 然後最好的事情是研究幾個好的現有模型,並理解他們爲什麼做出他們做的選擇。從互聯網隨機建議不會是非常值得信賴 – jmadsen

回答

0

所以......你想重新發明輪子? 當然,繼續。我只想提醒你。

首先,讓我們從一些非常基本的東西開始。我不會在每個操作中複製/粘貼該代碼,而是將其放置在您的AppController中。

public function beforeFilter() { //called in all your controller actions 
    parent::beforeFilter(); 
    $mySession = $this->Session->read('yourSession'); 
    if ($mySession === null) { 
     $this->render('something'); 
     return; 
    } 
    if (!$mySession->isAuthenticated()) { 
     $this->render('login'); 
     return; 
    } 
    //the rest of your logic 
} 

這種做法是非常基本的,你可能想在一個組件來包裝這個,所以你可以在其他應用程序中使用它,或者你甚至可以創建一個插件,它是在這種情況下,最好的解決辦法。

如果你不想進入Auth的內部,那麼你可以看看我們在CakeDC中做的Users Plugin

另一個建議(與認證的邏輯無關)是,照顧coding conventions。它們使您的代碼更易於閱讀和理解。此外,儘量早返回並避免嵌套條件。

祝你在學習過程中最美好的祝願。

+0

太棒了!感謝您的意見。 – jason