CakePHP 2 - handmatige aanmelding niet toevoegen aan sessie

Ik ben nieuw bij CakePHP en probeer mijn hoofd rond registratie/login te krijgen, Im met cakephp 2.0

Als ik een gebruiker maak met behulp van een registercontrollerfunctie en vervolgens afzonderlijk inlogt, bevat de sessie ( $ this-Auth-user() ) alle modelwaarden die ik verwacht.

If i follow the cakephp 2.0 book example and manually login during the register then I do get logged in but $this->Auth->user() only contains the fields from the register form not the User Model. (ie. its missing my Model fields "created", "full name" etc but includes "password" and "passwordconfirm" both unencrypted)

Mis ik hier iets?

Aanmeldingsactie:

public function login(){
if($this->request->is('post')){
    if($this->Auth->login()){
        return $this->redirect($this->Auth->redirect());
    } else {
        $this->Session->setFlash(__('Invalid Username or Password.'), 'default', array(), 'auth');
    }
}
}

Registreer actie (met automatische login):

public function register(){
    if($this->request->is('post')){
        $this->User->create();
        if($this->User->save($this->request->data)){

            //Login automatically
            if($this->Auth->login($this->data['User'])){

                $this->Session->setFlash(__('Welcome to Test Site.'), 'default', array(), 'auth');
                return $this->redirect($this->Auth->redirect());

            } else {
                $this->Session->setFlash(__('Failed to login with new account.'), 'default', array(), 'auth');
                $this->redirect(array('action' => 'login'));
            }
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }
}

Register.ctp View

<?php
echo $this->Form->create('User', array('action' => 'register'));
echo $this->Form->input('username');
echo $this->Form->input('password', array('label' => 'Password'));
echo $this->Form->input('passwordconfirm', array('label' => 'Confirm Password', 'type' => 'password'));
echo $this->Form->input('email', array('label' => 'Email (optional)'));
echo $this->Form->end('Join');
?>

Bedankt voor alle hulp, jongens verontschuldigingen, dit is een beetje lang!


BEWERK:

Found a workaround! Looks like $this->Auth->login($this->data['User']) was failing to AuthComponent::identify() my User so i changed it for the following 3 lines:

$LoggedInID = $this->User->field('id', array('username' => $this->Auth->user('username')));
$user = $this->User->read(null, $LoggedInID);
$this->Auth->login($user);

en dit werkt een traktatie.

BEWERK: You can also just use the return value of save():

        if($user = $this->User->save($this->request->data)){

            //Login automatically
            if($this->Auth->login($user)){
3

2 antwoord

Probeer het te veranderen

if($this->Auth->login($this->data['User'])){

naar

if($this->Auth->login()){
1
toegevoegd

Ik loste dit op door de waarde van "session.cookie_domain" naar mijn domeinnaam in PHP.ini te veranderen.

session.cookie_domain = my.domain.com

Nu werkt het perfect.

Sessie-instellingen van core.php zijn als volgt

Configure::write('Session', array(
    'defaults' => 'php'     
));
0
toegevoegd