Как я могу использовать куки для аутентификации в CakePHP? - PullRequest
2 голосов
/ 17 июля 2009

Я пытаюсь использовать cookie-файл, установленный другой страницей в моем домене, для аутентификации пользователя. Скажем, у меня есть needpassword.example.com, написанный с использованием cakephp, и файл cookie создается auth.example.com (с использованием программы Perl CGI).

Чтобы войти на needpassword.example.com, мне нужно перенаправить на auth.example.com, чтобы установить cookie, а затем использовать CakePHP для анализа cookie.

Как мне разобрать этот файл cookie? И как мне изменить компонент Auth, чтобы сделать это?

И как я могу переопределить класс Auth, чтобы вместо этого перейти на auth.example.com для аутентификации, а не с использованием модели User? Переопределив метод идентификации в Auth.php?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 17 июля 2009

Поскольку ваши потребности озвучиваются в соответствии с первоначальным замыслом 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);
    }
}

.. и замените все экземпляры AuthComponent в ваших контроллерах на AppAuthComponent.

  • Вам нужно только определить методы, которые вы хотите заменить.
  • Вы можете запускать методы из исходного AuthComponent (даже те, которые вы переопределили) в любой момент во время ваших методов, используя parent::...
  • Аргументы метода должны оставаться в том же порядке, что и исходный API для согласованности.
  • Если вы хотите добавить больше аргументов метода, поместите их после API, например:

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

Этот подход позволяет вам выполнять настройку под конкретное приложение, в то же время, при необходимости, используя самые последние методы, определенные в ядре.

0 голосов
/ 17 июля 2009

Предполагая, что я понимаю ваш вопрос ... Пока auth.example.com устанавливает cookie с доменом ".example.com", браузер пользователей будет отправлять его вместе с запросом needpassword.example.com, и вы будете быть в состоянии получить к нему доступ в вашем скрипте PHP с помощью следующего:

    $auth = $_COOKIE['auth'];

Затем вы можете внести изменения в файл cookie следующим образом:

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

(Примечание: время () + 300 устанавливает дату истечения срока действия файлов cookie на 5 минут в будущем, вы можете изменить это)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...