0

检查我的网站时出现以下错误:

Fatal error: Call to a member function getUserID() on a non-object in /home/clientwo/public_html/main/registry/authenticate.php on line 104

这是代码:

<?php
class Authenticate {

    private $user;
    private $status;
    private $loggedIn = false;

    public function __construct(Registry $registry) {
        $this->registry = $registry;
        $this->status = 'User is logged out';
    }

    private function checkForAuthentication() {
        if (isset($_SESSION['sn_auth_session_uid']) && $_SESSION['sn_auth_session_uid'] > 0) {
            $this->sessionAuthenticate(intval($_SESSION['sn_auth_session_uid']));
        }
    }

    private function sessionAuthenticate($id) {
        //build a user model
        require_once FRAMEWORK_PATH . 'model/user.php';
        $this->user = new UserModel($this->registry, $id);
        //check if user is valid etc
        if ($this->user->isValid()) {
            if (!$this->user->isActive()) {
                $this->loggedIn = false;
                $this->status = 'User has been deleted';
            } else {
                $this->loggedIn = true;
                $this->status = 'User is logged in';
            }
        } else {
            $this->loggedIn = false;
            $this->status = 'User could not be found';
        }
        //make sure sessions are not set if user is not logged in
        if (!$this->loggedIn) {
            $this->logout();
        }
    }

    public function login($username, $password) {
        //first log out
        $this->logout();
        //execute query
        $this->registry->getObject('mysql')->executeQuery("SELECT UserID FROM user WHERE Username='". $username . "' AND password='" . md5($password) . "'");
        //check if query returned one row
        if ($this->registry->getObject('mysql')->numRows() == 1) {
            //get user row
            $UserData = $this->registry->getObject('mysql')->getRow();
            //build a user model
            require_once FRAMEWORK_PATH . 'model/user.php';
            $this->user = new UserModel($this->registry, $UserData['UserID']);
            //check if user is valid and active etc
            if ($this->user->isValid()) {
                if ($this->user->isActive() == false) {
                    $this->loggedIn = false;
                    $this->status = 'User has been deleted';
                } else {
                    $this->loggedIn = true;
                    $this->status = 'User is logged in';
                    $this->user->increaseLogins();
                    $this->user->update();
                    $_SESSION['sn_auth_session_uid'] = $this->user->getUserID();
                }
            } else {
                $this->loggedIn = false;
                $this->status = 'Authentication failed';
            }
        } else {
            $this->loggedIn = false;
            $this->status = 'Authentication failed';
        }
    }

    function logout() {
        //if such a session is set, unset it
        if (isset($_SESSION['sn_auth_session_uid'])) {
            unset($_SESSION['sn_auth_session_uid']);
        }
        //reset to logged out
        $this->loggedIn = false;
        //reset to null
        $this->user = null;
    }

    public function isLoggedIn() {
        $this->checkForAuthentication();
        return $this->loggedIn;
    }

    public function isAdmin() {
        $this->checkForAuthentication();
        return $this->user->isAdmin();
    }

    public function getUser() {
        $this->checkForAuthentication();
        return $this->user;
    }

    public function getUserID() {
        $this->checkForAuthentication();
        return $this->user->getUserID();
    }

    public function getStatus() {
        $this->checkForAuthentication();
        return $this->status;
    }



}
?>
4

1 回答 1

0

This line is not returning the user object

$this->user = new UserModel($this->registry, $UserData['UserID']);
于 2012-07-16T01:43:19.090 回答