0

我对 phpcas 身份验证有疑问。
我使用带有路由器的应用程序框架。
我使用 .htaccess 以框架预期的正确格式重写 URL。
我的问题如下,当我直接在索引页面(https:\\ {服务器名称} \ site_name)上连接到我的应用程序时,phpCAS身份验证效果很好。另一方面,如果我尝试直接在我的站点页面上进行身份验证(https:\\ {服务器名称} \ site_name \ page \ action \ id),我有登录门户出现但无法显示该页面和我缺少告诉我“页面未正确重定向”的信息。

我希望您能帮助理解为什么通过连接主页身份验证工作得很好,但在网站的另一个页面上却不行?

这是我的 .htaccess

# Rewrite URL

Options +FollowSymlinks
RewriteEngine on

# Rewrite base
RewriteBase /operationregistration/

# Force the use of https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# Changes from index.php?page=X&action=Y&id=Z to X/Y/Z
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?\?ticket=([a-zA-Z0-9\-]*)+/?$ index.php?page=$1&action=$2&id=$3&ticket=$4 [NC,L]
RewriteRule ^([a-zA-Z]+)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$                             index.php?page=$1&action=$2&id=$3           [NC,L]

这是我的班级 caslogin.php

class CASLogin
{

    /**
     * CASLogin constructor.
     */
    public function __construct()
    {
        phpCAS::setDebug('logs');
        phpCAS::setVerbose(true);

        phpCAS::client(CAS_VERSION_2_0, Config::get("cas_server_url") , intval(Config::get("cas_server_port")), Config::get("cas_server_uri"));

        phpCAS::setNoCasServerValidation();
    }

    /**
     * Perform a CAS login
     */
    public function login() {

        // Save the current page
        $_SESSION["url_to_redirect"] = $this->getCurrentPageURL();
        
        //phpCAS::setServerServiceValidateURL($this->getCurrentPageURL());
        // Force the authentication
        phpCAS::forceAuthentication();

        $permission_manager = new PermissionManager(true);

        // If the redirection URL is still present
        if (isset($_SESSION["url_to_redirect"]) && !empty($_SESSION["url_to_redirect"])) {

            // Redirect to the url_to_redirect
            header('Location: ' . $_SESSION["url_to_redirect"]);

            // Unset the session variable
            unset($_SESSION['url_to_redirect']);
            exit();
        }
    }

    /**
     * Perform a CAS logout
     */
    public function logout() {

        session_destroy();
        session_unset();

        phpCAS::logout();
    }

    /**
     * Return the current Page URL
     * @return string
     */
    private function getCurrentPageURL() {
        return "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }

}
4

0 回答 0