我正在研究新项目的用户管理组件。 计划是:
但是自动登录存在一些问题。这是我使用的代码的一部分:
<?php
...
// set userstatus to "active" and delete meta information "activation_key"
// then automatically login
$this->User->id = $id;
$this->User->saveField('modified', date('Y-m-d H:i:s') );
$this->User->saveField('status', 1 );
// $this->User->deleteActivationKey ....
$this->Auth->login($this->User->read());
$this->Session->setFlash(__('Successfully activated account. You are now logged in.'));
$this->User->saveField('last_login', date('Y-m-d H:i:s') );
$this->redirect(array('controller' => 'pages'));
...
到目前为止,这是有效的,直到您想要使用Auth组件的user()函数获取有关登录用户的信息。
我们在AppController-&gt; beforeRender中使用它,以便在应用程序范围内提供用户信息:
$this->set('auth', $this->Auth->user());
但在自动登录操作之后,我收到了未定义的索引通知。 (例如,通过在视图中访问$ auth ['id'])。 print_r()仅显示当前用户的用户名和哈希密码。 如果您手动登录,一切正常。它必须是帐户激活后自动登录的东西。
似乎是会话的问题?我做错了什么?
答案 0 :(得分:11)
在测试了许多变体之后找到了解决方案。
现在使用:
$user = $this->User->findById($id);
$user = $user['User'];
$this->Auth->login($user);
不知道为什么,我以为我已经尝试过这种方式,但是没有用。
答案 1 :(得分:1)
public function signup() {
if (!empty($this->request->data)) {
// Registration stuff
// Auto login
if ($this->Auth->login()) {
$this->redirect('/');
}
}
}
那很简单!