2009-07-17 39 views
2

我正在嘗試使用由我的域中的其他頁面設置的cookie來驗證用戶身份。 假設我有使用cakephp編寫的needpassword.example.com, ,並且cookie由auth.example.com(使用Perl CGI程序)生成。如何在CakePHP中使用Cookie進行身份驗證?

要登錄到needpassword.example.com,我需要重定向到auth.example.com以設置cookie,然後使用CakePHP來解析cookie。

我該如何解析這個cookie?我如何修改Auth組件來完成這些?

如何覆蓋Auth類而不是去auth.example.com進行身份驗證,而不是使用用戶模型?通過重寫Auth.php中的標識方法?

非常感謝。

+0

您是否檢查過是否使用絕對URL(即http://auth.example.com)設置AuthComponent :: loginAction參數? – deizel 2009-07-17 13:15:40

回答

2

由於您的需求聽起來與AuthComponent最初設計的設計不同,所以您有兩種選擇。首先,如果它確實不符合你的需求,你可以創建和維護你自己的AuthComponent。通過將/cake/libs/controller/components/auth.php複製到/app/controller/components/auth.php來完成此操作。

這將允許您完全重寫組件,但缺點是升級蛋糕時,您將不再接收AuthComponent的更新。

其次,你可以使用下面的模式在CakePHP中延伸任何事情:

// save as: /app/controllers/components/app_auth.php 
App::import('Component', 'Auth'); 
class AppAuthComponent extends AuthComponent { 
    function identify($user = null, $conditions = null) { 
     // do stuff 
     return parent::indentify($user, $conditions); 
    } 
} 

..和你AppAuthComponent取代的AuthComponent所有實例的控制器。

  • 您只需要定義您想要替換的方法。
  • 可以使用parent::...
  • 方法參數應保持in the same order as the original API一致性運行期間,你的方法從原來的AuthComponent在任何一點的方法(甚至是那些您已經重新定義)。
  • 如果你想添加更多方法的參數,把他們的API的人後,如:

    function identify($user = null, $conditions = null, $custom = array()) { ... }

這種方法可以讓你做出領域的應用需求,同時還採用了最新的方法必要時在覈心中定義。

0

假設我瞭解您的問題...只要auth.example.com將cookie設置爲域名「.example.com」,用戶瀏覽器就會將它與請求一起發送到needpassword.example.com和您可以用下面的訪問它在你的PHP腳本:

$auth = $_COOKIE['auth'];

然後,您可以更改cookie的有以下:

setcookie("auth", "value", time() + 300, "/", ".example.com");

(注:時間()+ 300套cookie將來的有效期限爲5分鐘,您可能需要更改此項)

+0

嗨,它看起來很容易,這正是我想要的。 那麼我怎樣才能覆蓋Auth類去取代auth.example.com進行身份驗證,而不是使用User模型? – 2009-07-17 05:34:51

相關問題