登录过程CakePHP 2.7

登录过程CakePHP 2.7,php,cakephp,authentication,login,token,Php,Cakephp,Authentication,Login,Token,我有一个基于CakePHP2.7框架的登录过程。我使用Auth组件进行身份验证,但为了增加安全性,我也使用令牌。当我进入登录页面并尝试登录时,它所做的只是提交表单,但没有其他任何事情发生。页面基本上只是重新加载,没有重定向,什么都没有。我做了一些挖掘,发现它可能没有通过用户控制器中登录函数中的第一个条件。我真的很困惑为什么会这样。我已经检查了所有的错误日志,屏幕上没有显示任何错误信息。下面我介绍了UsersController、AppController、UserModel和Tour类(用于令牌

我有一个基于CakePHP2.7框架的登录过程。我使用Auth组件进行身份验证,但为了增加安全性,我也使用令牌。当我进入登录页面并尝试登录时,它所做的只是提交表单,但没有其他任何事情发生。页面基本上只是重新加载,没有重定向,什么都没有。我做了一些挖掘,发现它可能没有通过用户控制器中登录函数中的第一个条件。我真的很困惑为什么会这样。我已经检查了所有的错误日志,屏幕上没有显示任何错误信息。下面我介绍了UsersController、AppController、UserModel和Tour类(用于令牌)。任何帮助都将不胜感激

用户控制器:

<?php

class UsersController extends AppController {

  var $name = 'Users';
  var $uses = array('User', 'Team');

  function beforeFilter() {
    $this->Auth->allow('check_login', 'index', 'wsdl', 'admin_wsdl', 'admin_service');
    parent::beforeFilter();
  }


  function login() { 
    if (!empty($this->data) && $this->Auth->user()) {
      // Delete all old tokens
      $this->Tour->recursive = -1;
      $this->Tour->deleteAll(array('Tour.userid' => $this->Auth->user('userid')));
      // Create a new token
      $this->Tour->create();
      $this->Tour->save(array('token' => md5(rand()), 'userid' => $this->Auth->user('userid')));
      // Update login count
      $user = $this->User->read(null, $this->Auth->user('userid'));
      $user['User']['logincount']++;
      $this->User->saveField('logincount', $user['User']['logincount']);
      // Update last login time
      $this->User->saveField('lastlogin', date('Y-m-d h:m:s'));
       if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error(__('Invalid username or password, try again'));
      }

    }
  }

function find_home() {

    $user = $this->User->read(null, $this->Auth->user('userid'));
    if ($user['User']['mentor'] == '1') {
      $this->redirect('/admin/teams');
    }else if ($user['User']['teacher'] == '1') {
      $this->redirect('/teacher/teams');
    }else{

      // Get this student's team
      $this->redirect('/projects/view/?token=' . urlencode($user['Tour'][0]['token']) . '&projectid=' . urlencode($user['Team'][0]['id']));
    }
  }
?>
class AppController extends Controller {

  var $components = array(
    'Auth'=>array(
      'loginRedirect' => array('controller' => 'users', 'action' => 'find_home'),
      'autoredirect'=>'false',
      'authError'=>"Please Log In to Access this Page.",
      'authorize'=>array('Controller'))
    , 'Session', 'RequestHandler');
  var $uses = array('Tour');

  function beforeFilter() {
    $this->setLayout();

    if ($this->Session->check('Auth.User.userid')) {
      $tour = $this->Tour->findByUserid($this->Session->read('Auth.User.userid'));
      $user = $this->Auth->user();
      $tour = $this->Tour->findByUserid($user['User']['userid']);
      $user['Tour'] = $tour['Tour'];
      $this->set('user', $user);
    }else if (isset($_GET['token'])) {
      $tour = $this->Tour->read(null, $_GET['token']);
      if ($tour) {
        $tour['Tour']['sessionmodified'] = date('Y-m-d H:i:s');
        $this->Tour->save($tour);
        $this->set('user', $tour);
      }
    }
  }

  private function setLayout() {
    if (array_key_exists('prefix', $this->params)) {
      if ($this->params['prefix'] == 'admin') {
        $this->layout = 'admin';
      }else if ($this->params['prefix'] == 'teacher') {
        $this->layout = 'teacher';
      }
    }
  }

}

?>
用户模型:

<?php

class User extends AppModel {

    var $name = 'User';
    var $primaryKey = 'userid';
    var $displayField = 'username';

  var $hasAndBelongsToMany = array(
    'Team' => array(
      'className' => 'Team',
      'joinTable' => 'teamAssignments',
      'foreignKey' => 'userid',
      'associationForeignKey' => 'teamid',
      'unique' => 'true'
    )
  );

  var $hasMany = array(
    'Assessment' => array(
      'className' => 'Assessment',
      'foreignKey' => 'student_id'
    ),
    'Assessment' => array(
      'className' => 'Assessment',
      'foreignKey' => 'teacher_id'
    ),
    'AssessmentComment' => array(
      'className' => 'AssessmentComment',
      'foreignKey' => 'student_id'
    ),
    'AssessmentComment' => array(
      'className' => 'AssessmentComment',
      'foreignKey' => 'teacher_id'
    ),
    'Tour' => array(
      'className' => 'Tour',
      'foreignKey' => 'userid'
    ),
    'Wiki' => array(
      'className' => 'Wiki',
      'foreignKey' => 'user_id'
    )
  );

  function archive($id) {
    if (!$id) {
      return false;
    }else{
      $this->recursive = -1;
      $user = $this->read(null, $id);
      $user['User']['active'] = false;
      $this->save($user);
      return true;
    }
  }

  function getInfo($id, $team_id, $token) {
    $user = $this->read(null, $id);
    // Make sure the token is valid
    $this->Tour->recursive = 2;
    $tour = $this->Tour->findByToken($token);
    if ($team_id == '_definst_') {
      // This is the global chat application or some other exception
      $user = $this->read(null, $id);
      $info['userid'] = $user['User']['userid'];
      $info['firstName'] = $user['User']['firstName'];
      $info['lastName'] = $user['User']['lastName'];
      $info['emailAddress'] = $user['User']['emailAddress'];
      $info['logincount'] = $user['User']['logincount'];
      $info['lastlogin'] = $user['User']['lastlogin'];
      $info['mentor'] = $user['User']['mentor'];
      return http_build_query($info);
    }else if ($tour) {
      // Make sure this user has permission to look at this team
      $on_team = false;
      if ($tour['User']['mentor'] == 1) {
        $on_team = true;
      }else{
        foreach ($tour['User']['Team'] as $team) {
          if ($team['id'] == $team_id) {
            $on_team = true;
            break;
          }
        }
      }
      if ($on_team) {
        // Make sure the requested user is on the requested team
        $user = $this->read(null, $id);
        $on_team = false;
        if ($tour['User']['mentor'] == 1) {
          $on_team = true;
        }else{
          foreach ($user['Team'] as $team) {
            if ($team['id'] == $team_id) {
              $on_team = true;
              break;
            }
          }
        }
        if ($on_team) {
          $team = $this->Team->read(null, $team_id);
          $info['userid'] = $user['User']['userid'];
          $info['username'] = $user['User']['username'];
          $info['firstName'] = $user['User']['firstName'];
          $info['lastName'] = $user['User']['lastName'];
          $info['emailAddress'] = $user['User']['emailAddress'];
          $info['teacher'] = $user['User']['teacher'];
          $info['logincount'] = $user['User']['logincount'];
          $info['lastlogin'] = $user['User']['lastlogin'];
          $info['mentor'] = $user['User']['mentor'];
          $info['teamid'] = $team['Team']['id'];
          $info['teamName'] = $team['Team']['teamName'];
          $info['instancename'] = $team['Team']['instanceName'];
          return http_build_query($info);
        }
      }
      return '';
    }
  }

  function validate($token, $team_id) {
    $this->Tour->recursive = 2;
    $tour = $this->Tour->findByToken($token);
    if ($team_id == '_definst_') {
      // This is the global chat application or some other exception
      return $tour['Tour']['userid'];
    }else if ($tour) {
      // Make sure this user is on this team or is a mentor
      $on_team = false;
      if ($tour['User']['mentor'] == 1) {
        $on_team = true;
      }else{
        foreach ($tour['User']['Team'] as $team) {
          if ($team['id'] == $team_id) {
            $on_team = true;
            break;
          }
        }
      }
      if ($on_team) {
        return $tour['Tour']['userid'];
      }
    }
    return '';
  }

  function wsKillSession($token) {
    // Delete any tours
    $this->Tour->recursive = -1;
    $tour = $this->Tour->findByToken($token);
    $this->Tour->deleteAll(array('Tour.userid' => $tour['Tour']['userid']));
    return 1;
  }

  function getUsers($user_id, $token, $team_name) {
    $user = $this->read(null, $user_id);
    $team = $this->Team->find('first', array('conditions' => array('Team.teamName' => $team_name)));
    $users = array();
    foreach ($team['User'] as $user) {
      $users[] = array('userid' => $user['userid'], 'username' => $user['username'], 'firstName' => $user['firstName'], 'lastName' => $user['lastName'], 'emailAddress' => $user['emailAddress'], 'teacher' => $user['teacher'], 'logincount' => $user['logincount'], 'lastlogin' => $user['lastlogin'], 'mentor' => $user['mentor'], 'teamid' => $team['Team']['id'], 'teamName' => $team['Team']['teamName'], 'instanceName' => $team['Team']['instanceName']);
    }
    return serialize($users);
  }

}

?>

旅游班:

<?php



    class Tour extends AppModel {

        var $name = 'Tour';
      var $useTable = 'sessions';
      var $primaryKey = 'token';

      var $belongsTo = array(
        'User' => array(
          'className' => 'User',
          'foreignKey' => 'userid'
        )
      );

    }

    ?>

$this->Auth->user()
如果用户未登录,则返回
null
。您需要检查
null


非常感谢。成功了!但现在由于某种原因,它抛出了一个MySQL错误,它说:
完整性约束冲突:1048列“userid”不能为null
知道是什么导致了这一点吗?这一行:
$this->Tour->save(array('token'=>md5(rand()),'userid'=>this->$Auth->user('userid')
$this->Auth->user('userid')
将返回
null
。我将如何修复此问题?
function login() { 
    if (!empty($this->data) && !$this->Auth->user()) {

    }
}