2014-02-28 14 views
0

我已經很容易地用CakePHP創建了許多身份驗證應用程序。但是,它始終是相同的:用戶名和密碼。在CakePHP登錄中有第三個字段

我想爲用戶創建一個登錄名以選擇一家公司,如果對該公司的身份驗證失敗,它將返回到登錄頁面而不讓他登錄。

這樣做的原因是,我們在一個有許多孩子的「家長」公司工作。這些兒童公司的所有管理都來自母公司。但是現在,由於並非母公司中的所有員工都可以訪問所有兒童公司,我們需要檢查他們在登錄某個公司時是否可以訪問該特定公司。訣竅是它是一對多的關係。一個用戶可以訪問一個公司或2個或3個或全部。

由於cakePHP網站上的指南,我有了認證的基礎知識,但是我需要從這裏更改以進行額外的身份驗證檢查嗎?

+0

發展? –

+0

對不起,cakePHP 2.4 – Albert

+1

不能將用戶重定向到他的一個隨機公司(即alfabetical順序中的第一個公司),登錄後讓用戶在公司之間切換?您可以在您的UsersController登錄操作中執行重定向,然後您可以創建switchCompany操作 – arilia

回答

3

你必須創建自己的身份驗證組件

,你必須執行,檢查,如果你的用戶可以登錄,如果是假否則返回他的數據陣列的功能。

\控制器\分量\身份驗證\ CompanyAuthenticate.php

App::uses('FormAuthenticate', 'Controller/Component/Auth'); 

class CompanyAuthenticate extends FormAuthenticate 
{ 
    public function authenticate(CakeRequest $request, CakeResponse $response) 
    { 
     $user = parent::authenticate($request, $response); 
     if(!$user) 
      return false; 
     else 
     { 
      //check company 
      // if company is ok return $user 
      // else return false 
     } 
    } 

} 

編輯:

當然你得告訴你,都在使用這種認證

的應用程序

所以在你的AppController中你必須這樣做:

public $components = array(
    'Auth' => array(
     'authenticate' => array('Company'), 
     // ... other options 
     ), 
    // ... other components you wish to load 
); 
+0

這不起作用。我在'root/lib/Cake/Controller/Component/Auth /'下添加了我的函數,但它沒有運行。我通過在'else'中添加一個'return false'來測試它,但仍然沒有發生。 – Albert

+0

得到它的工作。不得不在我設置我的身份驗證的「AppController」中更改我的'$ components'數組。還將'CompanyAuthenticate.php'移回到'APP/Controller/Component/Auth'。然而,現在我得到一個'不能調用抽象方法BaseAuthenticate :: authenticate()'錯誤... – Albert

+0

好吧,我會編輯我的答案 – arilia

1

的注意事項使用此方法謹慎:

我繼承了CMS是做了這樣的事情。它使用公司名稱,公司密碼,用戶名和用戶密碼進行設置。然後CMS的一個實例將管理許多網站,根據輸入的憑證選擇哪一個網站。

事實證明,這是用戶最容易混淆的混亂。他們會不斷地試圖找出他們的公司用戶名和公司密碼。在任意用戶名的時代,這可能已經恢復正常,但是現在大多數人使用電子郵件地址作爲不需要的用戶名。

根據我的經驗,我完全看不出這樣做的正當理由。如果像谷歌,貝寶,Facebook等公司可以用一個用戶名和密碼算出來,那麼我相信你可以把它整理出來。

只是我的$ 0.02,哪個版本使用的是CakePHP的2.0,因爲它看起來像你剛剛起步的系統,我希望你調查其他的可能性:-)

+0

我們考慮過各種方法。由於我們所有的公司都通過Google運行他們的電子郵件,它甚至可以讓我選擇使用Google登錄信息作爲功能,並直接從那裏指向某個公司。但是,當一個電子郵件用戶需要訪問3個或4個公司時,這很難實現。我們不需要公司密碼。用戶將擁有一個用戶名和一個密碼,但可以根據下拉列表選擇公司,以解決公司用戶名和密碼問題。 – Albert