CakePHP 2 - ручне введення в систему, яке не додано до сеансу

Я новачок у програмі CakePHP і намагаюсь повернути реєстраційну/вхідну реєстраційну інформацію, використовуючи cakephp 2.0

Якщо я створюю користувача, який використовує функцію реєстрового контролера, а потім входу окремо, сеанс ( $ this-auth-користувач() ) містить всі значення моделі, які я очікую.

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)

Чи є тут щось відсутнє?

Вхід до дії:

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');
    }
}
}

Зареєструватися Действие (з автоматичним входом):

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.'));
        }
    }
}

Переглянути

<?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');
?>

Вітаю за будь-яку допомогу, хлопці вибачаються, це трохи довго!


EDIT:

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);

і це стає справжнім.

Редагувати: ви також можете просто використовувати повернення значення збереження ():

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

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

2 Відповіді

Спробуйте змінити

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

до

if($this->Auth->login()){
1
додано

Я вирішив це, змінив значення "session.cookie_domain" на моє доменне ім'я в PHP.ini.

session.cookie_domain = my.domain.com

Тепер він чудово працює.

Параметри сеансу core.php виглядають таким чином

Configure::write('Session', array(
    'defaults' => 'php'     
));
0
додано
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php