当用户每天使用cakephp 3.x或4验证超过5次时显示一条消息

mmvthczy  于 2023-05-17  发布在  PHP
关注(0)|答案(1)|浏览(151)

我想知道一个用户是否在同一天内登录了5次或更多次,然后给他发一条消息,这是我的登录功能:

public function login()
    {
        if($this->request->is('post')){
            $user = $this->Auth->identify();
            if($user){
               $this->Auth->setUser($user);               
                //return $this->redirect(['controller' => 'posts']);
                return $this->redirect(['controller' => 'users']);
               }
            
            // Bad login
            $this->Flash->error('Incorrect login.');
        }
    }

”””任何想法,请?**
我已经试过了,如果一个用户是登录或没有,但我不知道我怎么能从这里去我知道多少次用户登录在一天。

class AppController {
    // ....
     function beforeFilter(){
       ....
       $this->set('auth',$this->Auth);
     }
     //....
   }

in the view:

  if( $this->Auth->User('id') ) {
    // user is logged
  }
rsaldnfx

rsaldnfx1#

您的请求通过创建一个具有唯一标识符的缓存文件来解决,例如电子邮件加日期,在用户身份验证期间。
每次用户进行身份验证时,都需要将该高速缓存中的值增加1。
接下来,在你的应用程序中的某个地方读取缓存,如果值为5或更高,你会创建一条消息。

public function login()
{
    $loginAttempts = Cache::read(date('Ymd') . '_' . $email, 'loginAttempts');

    if ($this->request->is('post') && $loginAttempts >= 5) {
        $this->Flash->error('... your msg);
    }
   if($this->request->is('post')){
        $user = $this->Auth->identify();
        if($user){
           $this->Auth->setUser($user);

            $i = $loginAttempts + 1;
            Cache::write(date('Ymd') . '_' . $email, $i, 'loginAttempts');

          
            //return $this->redirect(['controller' => 'posts']);
            return $this->redirect(['controller' => 'users']);
           }
        
        // Bad login
        $this->Flash->error('Incorrect login.');
    }
}

相关问题