Monday, July 20, 2015

CakePHP 3 - Login form not working

I am following both the tutorials in the CakePHP 3 documentation and I am trying to get the login functionality working, but so far I have no luck.
I have a Users table with the 2 fields 'username' and 'password'. The password is hashed with `(new DefaultPasswordHasher)->hash($password);`

After I enter the username and password, I do get into the login function, but the `$this->Auth->identify();` never returns an user.
The post data is filled, but the password is not hashed yet. I assume this happens in `$this->Auth->identify();`?

Could anyone tell me what I ma doing wrong? I am not getting any errors I could work with.

I have the following form:
<?php
   
if(!is_null($this->request->session()->read('Auth.User.username')))
   
{
        echo
'logged in';
   
}
   
else
   
{
        echo $this
->Form->create('User', array('action' => 'login'));
        echo $this
->Form->input('username', [
           
'class' => 'w3-input',
               
'placeholder' => 'username',
               
'label' => false
           
]);
        echo $this
->Form->input('password', [
           
'class' => 'w3-input',
               
'placeholder' => 'password',
               
'label' => false
           
]);
        echo $this
->Form->button('Login', [
           
'class' => 'w3-btn'
       
]);
        echo $this
->Form->end();
   
}
?>

this is my AppController:
public function initialize()
   
{
        parent
::initialize();
        $this
->loadComponent('Flash');
        $this
->loadComponent('Auth', [
           
'scope' => [
               
'Users.active' => 1
           
],
           
'authenticate' => [
               
'Form' => [
                   
'fields' => [
                       
'username' => 'username',
                       
'password' => 'password'
                   
]
               
]
           
],
           
'loginAction' => [
               
'controller' => 'Users',
               
'action' => 'login'
           
],
           
'logoutRedirect' => [
               
'controller' => 'Users',
               
'action' => 'homepage'
           
]
       
]);

        $this
->layout = 'creed';
   
}

In the query it uses (she bottom of post), it never uses the scope at all or the password field.

And this is my login function:

public function login()
   
{
       
if($this->request->is('post'))
       
{
            $user
= $this->Auth->identify();
           
if($user)
           
{
                $this
->Auth->setUser($user);

               
return $this->redirect($this->Auth->redirectUrl());
           
}
       
}
   
}


This is the query that is being used in the login function
SELECT `Users`.`id` AS `Users__id`,
       
`Users`.`username` AS `Users__username`,
       
`Users`.`password` AS `Users__password`,
       
`Users`.`email` AS `Users__email`,
       
`Users`.`level` AS `Users__level`,
       
`Users`.`image` AS `Users__image`,
       
`Users`.`signature` AS `Users__signature`,
       
`Users`.`active` AS `Users__active`,
       
`Users`.`date_joined` AS `Users__date_joined`
    FROM
`users` `Users`
    WHERE
`Users`.`username` = 'DijkeMark'
    LIMIT
1


This returns 1 result, because there is a user in the DB with this name. But the password field is not being used.

I also baked the Entity and the Table file, so that should be correct too. I really start to hate CakePHP and it's authentication system, because I have done everything I am supposed to do and it gives not a single error on what I am doing wrong.

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

No comments: