php oop记住我的功能错误



我一直在遵循phpacademy在OOP登录和注册函数上的本教程,我似乎无法使记住我的功能正常工作。我认为问题是$user-> login();没有传递任何数据,但我似乎无法修复它。

这是我init.php

的一部分
if (Cookie::exists(Config::get('remember/cookie_name')) && !Session::exists(Config::get('session/session_name'))) {
$hash = Cookie::get(Config::get('remember/cookie_name'));
$hashCheck = DB::getInstance()->get('users_session', array('hash', '=', $hash));
if ($hashCheck->count()) {
    $user = new User($hashCheck->first()->user_id);
    $user-> login();
}

}

这是我的user.php文件

public function login($username = null, $password= null, $remember = false) {
    if (!$username && !$password  && $this->exists()) { 
//problematic if statement removing $this->exists() gives me the error  'Trying to get property of non-object'
        Session::put($this->_sessionName, $this->data()->id);
    } else {
        $user = $this->find($username);
        if ($user) {
            if ($this->data()->password === Hash::make($password, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->id);
                if ($remember) {
                    $hash = Hash::unique();
                    $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
                    if (!$hashCheck->count()) {
                        $this->_db->insert('users_session', array(
                            'user_id' => $this->data()->id,
                            'hash' => $hash
                        ));
                    } else {
                        $hash = $hashCheck->first()->hash;
                    }
                    Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                }
                return true;
            }
        }
    }
    return false;
}
public function exists() {
    return (!empty($this->_data)) ? true : false;
}

这些(部分)文件对我有用:

init.php:

if(Cookie::exists(Config::get('remember/cookie_name')) && !Session::exists(Config::get('session/session_name'))) {
    $hash = Cookie::get(Config::get('remember/cookie_name'));
    $hashCheck = DB::getInstance()->get('users_session', array('hash', '=', $hash));
    if($hashCheck->count()) {
        $user = new User($hashCheck->first()->user_id);
        $user->login();
    }
}

user.php :(我拥有的完整文件)

<?php
    class User {
        private $_db,
                $_data,
                $_sessionName,
                $_cookieName,
                $_isLoggedIn;
        public function __construct($user = null) {
            $this->_db = DB::getInstance();
            $this->_sessionName = Config::get('session/session_name');
            $this->_cookieName = Config::get('remember/cookie_name');
            if(!$user) {
                if(Session::exists($this->_sessionName)) {
                    $user = Session::get($this->_sessionName);
                    if($this->find($user)) {
                        $this->_isLoggedIn = true;
                    } else {
                    }
                }
            } else {
                $this->find($user);
            }
        }
        public function update ($fields = array(), $id = null) {
            if(!$id && $this->isLoggedIn()) {
                $id = $this->data()->id;
            }
            if(!$this->_db->update('users', $id, $fields)) {
                throw new Exception('There was a problem updating');
            }
        }
        public function create($fields) {
            if(!$this->_db->insert('users', $fields)) {
                throw new Exception('There was a problem creating an account');
            }
        }
        public function find($user = null) {
            if($user) {
                $field = (is_numeric($user)) ? 'id' : 'username';
                $data = $this->_db->get('users', array($field, '=', $user));
                if($data->count()) {
                    $this->_data = $data->first();
                    return true;
                }
            }
            return false;
        }
        public function login($username = null, $password = null, $remember = false) {
            if(!$username && !$password && $this->exists()) {
                Session::put($this->_sessionName, $this->data()->id);
            } else {
                $user = $this->find($username);
                if($user) {
                    if($this->data()->password === Hash::make($password, $this->data()->salt)) {
                        Session::put($this->_sessionName, $this->data()->id);
                        if($remember) {
                            $hash = Hash::unique();
                            $hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
                            if(!$hashCheck->count()) {
                                $this->_db->insert('users_session', array(
                                    'user_id' => $this->data()->id,
                                    'hash' => $hash
                                ));
                            } else {
                                $hash = $hashCheck->first()->hash;
                            }
                            Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
                        }
                    return true;
                    }
                }
            }
            return false;
        }
        public function hasPermission($key) {
            $group = $this->_db->get('groups', array('id', '=', $this->data()->group));
            if($group->count()) {
                $permissions = json_decode($group->first()->permissions, true);
                if($permissions[$key] == true) {
                    return true;
                }
            }
            return false;
        }
        public function exists() {
            return (!empty($this->_data)) ? true : false;
        }
        public function logout() {
            $this->_db->delete('users_session', array('user_id', '=', $this->data()->id));
            Session::delete($this->_sessionName);
            Cookie::delete($this->_cookieName);
        }
        public function data() {
            return $this->_data;
        }
        public function isLoggedIn() {
            return $this->_isLoggedIn;
        }
    }
?>

也许您正在阅读和设置不同的cookie。更改:

Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));

to:

Cookie::put(Config::get('remember/cookie_name'), $hash, Config::get('remember/cookie_expiry'));

最新更新