在我的CakePHP 2.4应用程序中(使用AuthComponent),我的用户模型上有一个banned
字段,禁止用户。如果用户尝试登录,则会检查该字段,如果他们被禁止,则会收到错误。
但是,这对当前登录的用户不起作用。 如何远程销毁用户'会话,从而将它们记录下来?
理论上,这可能是我可以放入beforeSave
的逻辑:
public function beforeSave(){
if($this->data['banned'] == 1){
// Logic to destroy session goes here
}
return true;
}
答案 0 :(得分:3)
您需要将数据库用于会话:http://book.cakephp.org/2.0/en/development/sessions.html#database-sessions
然后在用户模型的回调或信号beforeSave
上,您需要找出被禁用户的会话ID,然后将其删除或清除该特定条目的会话值。
就我而言,我有用户ID 5d76xxxx
和JSON结构,如下所述
S:2: “ID”,S:8: “5d76xxxx”
首先获取会话ID:
SELECT * FROM
cake_sessions
其中数据如'%s:2:“id”; s:8:“5d76xxxx”%'
然后更新或删除
更新
cake_sessions
SETdata
=''其中id ='e24a2120ff67fxxxxxxd7946f4e3'
我希望你有逻辑!
答案 1 :(得分:1)
您可以在AppFtroller的beforeFilter中检查用户的禁止字段
代码可能是这样的
$user = ClassRegistry::init('User');
$userId=$this->Auth->user('id');
$userInfo=$user->findById($userId);
if($userInfo['banned'] == 1){
$this->redirect($this->Auth->logout());
}