2012-04-16 4 views
0

Этого я хочу достичь: Щелкните по продукту -> Зарегистрироваться -> Оформить заказ У меня есть страница, на которой вы выбираете продукт, и у меня есть все ссылки на продукты, которые идут в контроллер checkout и передают параметр по URL-адресу , например domain.com/checkout/product-name.Как перенаправить на страницу регистрации вместо входа?

Тем не менее, я хочу, чтобы пользователь вошел в систему перед использованием контрольного контроллера, поэтому, естественно, я отклонил его с помощью $this->Auth->deny('index') в контрольном контроле beforeFilter(). Теперь, когда я пытаюсь получить доступ к контроллеру проверки, он перенаправляет меня на страницу входа. Есть ли способ заставить меня перейти на страницу регистрации?

+0

запрещающее это как блокировка всех из. это не то, что вы хотите. просто не разрешайте это, и пользователь будет вынужден сначала пройти аутентификацию. – mark

+0

Как мне «не разрешать»? – Strawberry

+0

с использованием компонента auth и НЕ вызывать Auth-> allow(). – mark

ответ

1

Вы можете установить переменную loginAction в $ компонентов декларации (контроллер или AppController), чтобы указать контроллер + действие:

public $components = array(
    'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
      'plugin' => 'users' 
     ), 
     'authError' => 'Did you really think you are allowed to see that?', 
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ) 
    ) 
); 

исх: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers

+0

Итак, я явно аутентифицируюсь ненадлежащим образом, но как я могу получить правильный поток страниц? Нажмите на продукт -> Регистрация -> Оформить заказ? Я могу просто запустить действие Register, чтобы перенаправить их на проверку после этого, но тогда мне пришлось бы изменить небольшую логику страницы продукта, чтобы, если они вошли в систему, она снова не перейдет на страницу регистрации. Есть лучший способ сделать это? – Strawberry

+1

Вы только что положили его. В действии контроллера продукта вы проверяете, зарегистрирован ли пользователь. Если да, покажите страницу продукта. Если нет, сохраните продукт в корзине/сеансе, а затем вызовите '$ this-> redirect ('register')', чтобы переслать их на страницу регистрации. И как вы заявили после регистрации, вызовите что-то вроде '$ this-> redirect ('checkout')', чтобы перенаправить их на страницу проверки. – Costa

+0

Ницца! Последний вопрос - хорошая идея сохранить имя продукта в сеансе в действии реестра и затем очистить его после проверки? – Strawberry

Смежные вопросы