CakePHP 2 - ручной вход не добавляется в сессию - PullRequest
3 голосов
/ 27 октября 2011

Я новичок в CakePHP и пытаюсь найти способ зарегистрироваться / войти в систему, я использую cakephp 2.0

Если я создаю пользователя с помощью функции контроллера регистра, а затем отдельно вхожу в сеанс ( $this-Auth-user () ) содержит все ожидаемые значения модели.

Если я последую примеру книги cakephp 2.0 и войду в систему во время регистрации, то я do войду в системуin но $ this-> Auth-> user () содержит только поля из формы регистра, но не пользовательскую модель.(т. е. в нем отсутствуют поля моей модели «создан», «полное имя» и т. д., но в нем есть «незашифрованные» и «пароль» и «пароль»)

Я что-то здесь упускаю?

Действие при входе:

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

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

Приветствую вас, парни, извинения, это немного долго!


РЕДАКТИРОВАТЬ:

Найден обходной путь!Похоже, $ this-> Auth-> login ($ this-> data ['User']) не удалось AuthComponent :: identifier () мой пользователь, поэтому я изменил его для следующих 3 строк:

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

и это работает угощение.

Редактировать: Вы также можете просто использовать возвращаемое значение save ():

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

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

Ответы [ 2 ]

1 голос
/ 07 января 2012

Попробуйте изменить

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

до

if($this->Auth->login()){
0 голосов
/ 17 мая 2012

Я решил эту проблему, изменив значение «session.cookie_domain» на мое доменное имя в PHP.ini.

session.cookie_domain = my.domain.com

Теперь все работает отлично.

Настройки сессии ядраphp выглядит следующим образом

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