如果用户未使用构造函数进行身份验证,则无法重定向到登录页面

时间:2018-01-03 12:41:18

标签: php

我有一个管理员控制器,可以处理用户登录和管理基本cms等其他管理功能。在构造函数中,我检查用户会话是否存在,一旦登录就设置。如果没有,并且他们尝试访问受限制的页面,则应重定向它们。如果我重定向到另一个页面,那么当进入登录页面时,我会立即重定向,因为很明显检查是在构造函数中完成的,但是一旦我尝试重定向到登录页面,我就会收到错误:

  

此页面无法正常工作localhost重定向您太​​多次。尝试   清除你的cookie。 ERR_TOO_MANY_REDIRECTS

class Admin extends Controller {

    public function __construct()

    {

        if(!isLoggedIn()) {

            redirect('admin/login');
        }

        $this->AuthModel = $this->model('Auth');

    }

isLoggedIn是一个函数:

function isLoggedIn() {

    if(isset($_SESSION['user_id']) && isset($_SESSION['browser']) && $_SESSION['browser'] == $_SERVER['HTTP_USER_AGENT']) {

        return true;

    } else {

        return false;
    }
}

登录方式:

public function login()
{
if($_SERVER['REQUEST_METHOD'] == 'POST') {

    $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    $password = trim($_POST['password']);

    $data = [

    'email' => $email,
    'password' => $password,
    'email_error' => '',
    'pass_error' => '',
    'no_user' => '',
    'pass_wrong' => ''

    ];

    if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {

        $data['email_error'] = 'Invalid email address <br />';
    }

    if(empty(trim($_POST['password']))) {

        $data['pass_error'] = 'Password required';
    }

    if(!empty(trim($_POST['email'])) && !$this->AuthModel->getUserByEmail($email)) {

        $data['no_user'] = 'Email does not exist';
    }


    if(!empty($data['email_error']) || !empty($data['pass_error']) || !empty($data['no_user'])) {

        $this->view('admin/login', $data);

    } else {

        $loggedInUser = $this->AuthModel->login($email, $password);

        if($loggedInUser) {

            $this->CreateUserSession($loggedInUser);


        } else {

            $data['pass_wrong'] = 'Incorrect login details';
            $this->view('admin/login', $data);
        }
    }

} else {

    $data = [

        'email' => '',
        'password' => '',
        'email_error' => '',
        'pass_error' => '',
        'no_user' =>'',
        'pass_wrong' => ''
    ];

    $this->view('admin/login', $data);
  }
}

1 个答案:

答案 0 :(得分:2)

您对controller和其他功能使用相同的login。每次检查authentication时都没有。它再次loops。尝试在单独的functionalities

中实施您的登录Controller