【问题标题】:CakePHP Auth User InformationCakePHP 验证用户信息
【发布时间】:2012-12-07 01:01:17
【问题描述】:

在我看来,我正在尝试显示当前登录的用户信息,并认为我可以通过使用来做到这一点

echo "Welcome back " .$this->Session->read('Auth.User.username'). "

这将显示用户名,我可以使用相同的方法显示该数据库行中的其他字段,但是其他一些字段可以随时更新,但在用户注销并再次登录之前不会在用户页面上更新。

这是正确的方法吗?或者这是否可以做得更好,并以某种方式将一些代码放在 AppController 的 beforeFilter() 中以继续更新每个页面加载时的变量?

【问题讨论】:

  • 你还应该在它周围使用 h() 来保护 html。

标签: php session cakephp variables authentication


【解决方案1】:

如果从 CakePHP 外部更新数据库并且没有调用任何控制器操作,似乎唯一的解决方案是在每个加载的页面上进行查询以获取当前值。

为此,您应该在 AppController 上使用beforeFilter 方法:

function beforeFilter(){
     $user = $this->User->field('name', array('User.id' => $this->Session->read('Auth.User.id')));
     $this->Session->write('Auth.User', $user);
}

否则,您可以使用 JavaScript 和 AJAX 不时获取数据。

【讨论】:

【解决方案2】:

我更喜欢获取实时数据而不是会话数据

var $uses = array('User');

function beforeFilter(){
    $id = $this->Auth->user('id'); //Using the session's user id is fine because it doesn't change/update
    $user_data = $this->User->findById($id);
    $user_fname = $user_data['User']['fname'];
    $this->set('fname', $user_fname);
}

//In your view
echo 'Welcome Back '. $fname . '!';

【讨论】:

  • 这看起来很完美,但是我收到以下错误 - 在非对象上调用成员函数 findById()
  • 我更新了答案,将 User 模型包含在 appController 中。
  • @TimJoyce,为什么你更喜欢获取实时数据而不是会话,你能解释一下吗?
  • @mgPePe 如果您的用户对其用户记录进行了更改,则在会话被销毁并重新创建之前,这不会反映在会话中。如果用户将他们的名字从 Frank 更改为 Al,则会话仍将显示 Frank,直到会话刷新。
  • @TimJoyce - 但是,我刚刚注意到 - 如果您登录,然后更改 DB 中的值,并调用 $this->Auth->user() 这将是旧信息。这意味着它仍然没有命中数据库,因此使用它并没有真正的优势
【解决方案3】:

如果您刚刚在 User 模型上创建了一个 afterSave(),并在其中设置 $this->Session->write('Auth.User') = $user;

这是未经测试的,但似乎应该可以工作 - 那么您的会话将始终是最新的任何更改。

编辑:

根据您的评论,如果数据是从您无权访问的第三方来源提取的,并且您需要确保在每次页面加载时都对其进行更新,那么是的,AppController 的 beforeFilter() 是很好。

但是,如果您只在某些页面或某些元素上需要它,则可以在那时调用更新,或通过元素的 requestAction。

【讨论】:

  • 我看到的问题(尚未测试)是数据没有通过这个应用程序更改,数据库是从另一个应用程序更新的,这个解决方案我假设只在 cakephp 表单保存后更新它。 .
  • @medoix - 这在你的问题中是值得一提的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2011-08-25
  • 1970-01-01
  • 2019-05-23
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多