OK, it looks like one can't override login() with AuthComponent in
place. I was sure I could, and it doesn't make sense to me that I
can't. If someone knows otherwise, please advise.

So, I tried putting my code in isAuthorized().


AppController:
function beforeFilter()
{
        $this->Auth->fields = array('username' => 'email', 'password' => 
'password');
        $this->Auth->loginError = 'No matching user found.';
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 
'login');
        $this->Auth->loginRedirect = array('controller' => 'pages', 'action'
=> 'display', 'home');
        $this->Auth->logoutRedirect = array('controller' => 'users', 'action'
=> 'login');
        $this->Auth->authorize = 'controller';
        
        if (isset($this->params['admin']) && $this->params['admin'])
        {
                $this->layout = 'admin';
        }
}

UsersController:

function beforeFilter()
{
        parent::beforeFilter();
        $this->Auth->allowedActions = array('eula', 'register', 
'reset_password');
}

public function login() {}

function isAuthorized()
{
        $user = $this->Auth->user();
        Debugger::log($user);
        
        if (empty($user['User']['last_login']))
        {
                Debugger::log('redirecting ...');
                $this->Auth->redirect(
                        array(
                                'controller' => 'users',
                                'action' => 'eula'
                        )
                );
        }
        else
        {
                /* save the login time
                 */
                $user['User']['last_login'] = date('Y-m-d H:i:s');
                $this->User->save($user);
                
                $this->Session->write('Auth.User', $user['User']);
        }
        return true;
}

Now, I can't log in at all! I tried putting return true; just inside
isAuthorized() and still Auth is emitting AuthError. That makes no
sense at all.

On Thu, Apr 9, 2009 at 10:49 AM, brian <bally.z...@gmail.com> wrote:
> I need to direct first-time users to an EULA page for a client's
> extranet. I thought I'd check the last_login field in order to decide
> whether to redirect there or not. However, for some reason, I'm being
> logged in but none of my custom code is running.
>
> function beforeFilter()
> {
>        parent::beforeFilter();
>        $this->Auth->allowedActions = array('eula', 'register', 
> 'reset_password');
> }
>
>
> public function login()
> {
>        if (!empty($this->data))
>        {
>                if ($this->Auth->login($this->data))
>                {
>                        $user = $this->Auth->user();
>
>                        if (empty($user['User']['last_login']))
>                        {
>                                $this->Auth->redirect(
>                                        array(
>                                                'controller' => 'users',
>                                                'action' => 'eula'
>                                        )
>                                );
>                        }
>                        else
>                        {
>                                /* save the login time
>                                 */
>                                $user['User']['last_login'] = date('Y-m-d 
> H:i:s');
>                                $this->User->save($user);
>
>                                $this->Session->write('Auth.User', 
> $user['User']);
>                        }
>                }
>                else
>                {
>                        $this->Session->setFlash($this->Auth->authError);
>                }
>        }
> }
>
>
> At first, I thought that the redirect() call was bad or something.
> But, if I toss in a die(debug('logged in')); right after the login()
> call, that doesn't run, either.
>
> So, how am I being logged in? I wondered if Cake's magic was getting
> in the way so I did this:
>
> public function login()
> {
>        if (!empty($this->data))
>        {
>                die(debug('got data'));
>
>                // ...
>
> This never fires, either. So, I then did this:
>
>
>
> public function login()
> {
>        die(debug('wtf'));
>
> Guess what? This fires.
>
> Anyone got a tip for me?
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to