5

我只是在处理我们新项目的用户管理组件。计划是:

  1. 用户使用最少的帐户数据(用户名、通行证、电子邮件)在页面上注册
  2. 用户收到一封带有激活链接的电子邮件以激活帐户
  3. 用户点击链接并激活他的帐户
  4. 系统在激活后自动登录用户并将他重定向到带有帐户信息的仪表板类型(上次登录,您好“用户名”等)

但是自动登录存在一些问题。这是我使用的代码的一部分:

<?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->beforeRender 中使用它来获得应用程序范围内的用户信息:

$this->set('auth', $this->Auth->user());

但是在自动登录操作之后,我收到了未定义的索引通知。(例如,通过在视图中访问 $auth['id'])。print_r() 只显示当前用户的用户名和哈希密码。如果您手动登录,一切正常。它必须是帐户激活后自动登录的东西。

似乎是会话的问题?我究竟做错了什么?

4

2 回答 2

12

在测试了许多变体后找到了解决方案。

现在与:

$user = $this->User->findById($id);
$user = $user['User'];
$this->Auth->login($user);

不知道为什么,我以为我已经尝试过这种方式,但没有奏效。

于 2012-03-11T10:22:11.240 回答
1

你试过这个吗?(CakePHP 2.x)

public function signup() {   
  if (!empty($this->request->data)) {
    // Registration stuff

    // Auto login
    if ($this->Auth->login()) {
      $this->redirect('/');
    }
  }
}

就这么简单!

于 2014-01-24T07:38:46.023 回答