CakePHP 2 - 手動ログインはセッションに追加されない

私はCakePHPに新しく、cakephp 2.0を使って私の頭を丸ごと登録/ログインするようにしています。

私が登録コントローラ機能を使用してユーザーを作成し、それから別々にログインした場合、セッション( $ this-Auth-user())には私が期待するすべてのモデル値が含まれています。

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

Register.ctpビュー

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

何人かの助けの人のために乾杯、これは少し長いです!


編集:

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

これは治療法です。

編集: 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 答え

変更してみてください

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

if($this->Auth->login()){
1
追加された

私はPHP.iniの "session.cookie_domain"の値を自分のドメイン名に変更することでこれを解決しました。

session.cookie_domain = my.domain.com

今は完璧に動作します。

core.phpのセッション設定は次の通りです

Configure::write('Session', array(
    'defaults' => 'php'     
));
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com