用角色登录

时间:2019-11-07 22:20:06

标签: php authentication

我试图根据用户的角色授予访问权限,我有2个类型为1的ID为1的管理员和2为ID的Client,到目前为止,有效的用户名和密码。这样客户可以进入管理部分,而我希望他只能访问客户的视图

这是我对模型的功能验证:

public function Verify($usuario, $contrasena) {

        try {
            $sql = "SELECT * FROM usuarios WHERE usuario = ? AND contrasena = ?" ;
            $stm = $this->pdo->prepare($sql);
            $stm->execute(array($usuario, $contrasena));

            $UsuarioDatos = $stm->fetch(PDO::FETCH_OBJ);

            if ($UsuarioDatos == NULL) {

                return FALSE;

            } else {

                return TRUE;

            }
        } catch (Exception $ex) {
            die($ex->getMessage());
        }
    }

这是我的login.controller:

public function Authenticate() {

        $usuario = $_REQUEST['usuario'];
        $contrasena = ($_REQUEST[('contrasena')]);
        $validar = $this->model->Verify($usuario, $contrasena);

        if ($validar) {
            $_SESSION['usuario']=$usuario;
            $_SESSION['idCategoriaUsu']=$validar['idCategoriaUsu'];

            $_SESSION['Iniciada']='true';


           if($_SESSION['idCategoriaUsu'] == 1){

            header('Location:index.php?c=Home');  
           }
           else {

            header('Location:index.php?c=ClienteNormal');
           }
        } else {

            header('Location: index.php?c=Login&error=true');            
        }

    }

直接转到:

            else {

            header('Location:index.php?c=ClienteNormal');
           }

2 个答案:

答案 0 :(得分:0)

您的函数“ Verify”返回一个布尔值。

除了这里:

$_SESSION['idCategoriaUsu']=$validar['idCategoriaUsu']

您尝试访问数组。

答案 1 :(得分:0)

Quentin Geenens的答案是正确的, 修改您的验证功能:

public function Verify($usuario, $contrasena) {
    try {
        $sql = "SELECT * FROM usuarios WHERE usuario = ? AND contrasena = ?";
        $stm = $this->pdo->prepare($sql);
        $stm->execute(array($usuario, $contrasena));
        $UsuarioDatos = $stm->fetch(PDO::FETCH_OBJ);
        if ($UsuarioDatos == NULL) {
            return FALSE;
        } else {
            return TRUE;
        }
    } catch (Exception $ex) {
        die($ex->getMessage());
    }
}

对此:

public function Verify($usuario, $contrasena) {
    try {
        $sql = "SELECT * FROM usuarios WHERE usuario = ? AND contrasena = ?";
        $stm = $this->pdo->prepare($sql);
        $stm->execute(array($usuario, $contrasena));
        $UsuarioDatos = $stm->fetch(PDO::FETCH_OBJ);
        if ($UsuarioDatos == NULL) {
            return FALSE;
        } else {
            return $UsuarioDatos;
        }
    } catch (Exception $ex) {
        die($ex->getMessage());
    }
}

如果$ UsuarioDatos不为NULL,则返回查询结果。

然后修改您的身份验证功能:

public function Authenticate() {
    $usuario = $_REQUEST['usuario'];
    $contrasena = ($_REQUEST[('contrasena')]);
    $validar = $this->model->Verify($usuario, $contrasena);

    if ($validar) {
        $_SESSION['usuario']=$usuario;
        $_SESSION['idCategoriaUsu']=$validar['idCategoriaUsu'];
        $_SESSION['Iniciada']='true';
        if($_SESSION['idCategoriaUsu'] == 1){
            header('Location:index.php?c=Home');
        }
        else {
            header('Location:index.php?c=ClienteNormal');
        }
    } else {
        header('Location: index.php?c=Login&error=true');            
    }
}

对此:

public function Authenticate() {
    $usuario = $_REQUEST['usuario'];
    $contrasena = ($_REQUEST[('contrasena')]);
    $validar = $this->model->Verify($usuario, $contrasena);

    if ($validar === FALSE) {
        header('Location: index.php?c=Login&error=true');  
    } else {
        $_SESSION['usuario'] = $usuario;
        $_SESSION['idCategoriaUsu'] = $validar['idCategoriaUsu'];
        $_SESSION['Iniciada']='true';
        if($_SESSION['idCategoriaUsu'] == 1){
            header('Location:index.php?c=Home');
        }
        else {
            header('Location:index.php?c=ClienteNormal');
        }                  
    }
}

我希望这个答案对您有帮助