2012-04-16 127 views
0

这是我想要实现的:点击一个产品 - >注册 - >结帐 我有一个页面供您选择一个产品,并且我有所有的产品链接去checkout控制器并通过URL传递一个参数。例如domain.com/checkout/product-name如何重定向到注册页面而不是登录?

但是,我希望用户在使用结帐控制器之前登录,所以自然,我在结帐控制器的beforeFilter()中拒绝了$this->Auth->deny('index')。现在,当我尝试访问结帐控制器时,它会将我重定向到登录页面。我有没有办法让它进入注册页面?

+0

否认就像是每个人都锁定了。那不是你想要的。只是不允许它,用户将被迫首先进行身份验证。 – mark 2012-04-16 08:12:15

+0

如何“不允许”? – Strawberry 2012-04-16 19:10:04

+0

通过使用auth组件,而不是调用Auth-> allow()。 – mark 2012-04-16 23:05:35

回答

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

因此,我明显地进行了不正确的身份验证,但是我怎样才能获得正确的页面流?点击产品 - >注册 - >结帐?我可以让注册操作将它们重定向为事后结帐,但之后我必须更改产品页面的一个小逻辑,以便如果它们已经登录,那么它不会再次进入注册页面。有一个更好的方法吗? – Strawberry 2012-04-16 19:08:50

+1

你刚刚布置。在产品控制器操作中,检查用户是否已登录。如果是,请显示产品页面。如果没有,将产品保存到购物车/会话中,然后调用'$ this-> redirect('register')'将它们转发到注册页面。正如你所说,注册后,调用类似'$ this-> redirect('checkout')'将其重定向到结账页面。 – Costa 2012-04-17 02:00:26

+0

不错!最后一个问题是,将产品名称存储到注册操作中的会话中并在结账后清除它是一个好主意? – Strawberry 2012-04-17 06:49:53

相关问题