私はしばらくこれに頭を悩ませてきましたが、これを機能させることができないようです。「phpCas::forceAuthentication」を呼び出すと、次のエラーが発生し続けます。
「「Access-Control-Allow-Origin」ヘッダーがありません...」。次のヘッダーを追加しましたが、まだ機能しません。
header('Access-Control-Allow-Origin: https://localhost');
私のバックエンドでは、次の方法で CAS を含めます。
require_once Yii::app()->basePath.'/lib/CAS.php';
これによりエラーが発生し、CASフォルダーの「Autoload.php」を(〜81行目)から変更して解決しました:
spl_autoload_register('CAS_autoload');
に
spl_autoload_register('CAS_autoload',true ,true);
そしてそれはその問題を解決しました。したがって、すべての背景を踏まえて、CAS にログインするために使用しようとしているコードを次に示します。
require_once Yii::app()->basePath.'/lib/CAS.php';
...
...
public function actionLogin() {
phpCAS::setNoCasServerValidation(); //don't verify SSL (testing)
$url = Yii::app()->params['casReturnURL'];
phpCAS::setFixedServiceURL ($url); //redirect from cas to this url
phpCAS::forceAuthentication(); //authenticate user
$this->actionIsLoggedInFetch(); //check login status
}
function actionIsLoggedInFetch(){
phpCAS::setNoCasServerValidation(); //don't validate SSL (testing)
$url = Yii::app()->params['casReturnURL']; //return url from CAS
phpCAS::setFixedServiceURL ($url); //set return url
$auth = phpCAS::checkAuthentication(); // check CAS authentication
if ($auth == true) {
$_SESSION['LOGGEDIN'] = true;
$_SESSION['USER'] = phpCas::getUser(); //get currently authenticate user
$return['LOGGEDIN'] = true;
}
else {
$_SESSION['LOGGEDIN'] = false;
$return['LOGGEDIN'] = false;
$_SESSION['USER'] = 'invalid';
}
echo jsonEncodePlusYii($return);
}
public function actionLogout() {
valRequestMethodGet();
phpCAS::setNoCasServerValidation(); //don't verify SSL
$url = Yii::app()->params['casReturnURL'];
phpCAS::logoutWithRedirectService($url); //logout then redirect to url
}
このコードは、上記のエラーを生成します。そのため、CAS フォルダーに付属していて魅力的に機能する「example_gateway.php」もテストしました。また、それが生成する URL をコピーしたので、ブラウザーに貼り付けると、CAS に問題なくアクセスできます。また、正しいページにも戻ります。これは基本的にそのコードですが、php ファイルに HTML が含まれていません。ここで何が間違っていますか?Yii はこの呼び出しを防ぐためにヘッダーを変更しますか? これに関するヘルプは本当に役に立ちます。
更新:さらにテストした後、これはまだ断続的です。私が使用する場合:
window.location.href = "/path/to/my/login/function";
それはうまくリダイレクトされます。また、独自の xhr リクエストを設定すると、時々それが行われます。ただし、ログアウト機能を呼び出すと、リダイレクトされることはありません....これまでに。何が起こっている?ここにデバッグログがあります。
2C49 .START (2016-02-04 16:23:17) phpCAS-1.3.4 ****************[CAS.php:467]
2C49 .=> phpCAS::client('2.0', 'cas.byu.edu', 443, '/cas') [CasController.php:9]
2C49 .| => CAS_Client::__construct('2.0', false, 'cas.byu.edu', 443, '/cas', true) [CAS.php:359]
2C49 .| <= ''
2C49 .<= ''
2C49 .=> phpCAS::setNoCasServerValidation() [CasController.php:33]
2C49 .| You have configured no validation of the legitimacy of the cas server. This is not recommended for production use. [CAS.php:1617]
2C49 .<= ''
2C49 .=> phpCAS::setFixedServiceURL('https://localhost/welfareManager') [CasController.php:35]
2C49 .<= ''
2C49 .=> phpCAS::forceAuthentication() [CasController.php:36]
2C49 .| => CAS_Client::forceAuthentication() [CAS.php:1078]
2C49 .| | => CAS_Client::isAuthenticated() [Client.php:1249]
2C49 .| | | => CAS_Client::_wasPreviouslyAuthenticated() [Client.php:1362]
2C49 .| | | | no user found [Client.php:1604]
2C49 .| | | <= false
2C49 .| | | no ticket found [Client.php:1463]
2C49 .| | <= false
2C49 .| | => CAS_Client::redirectToCas(false) [Client.php:1258]
2C49 .| | | => CAS_Client::getServerLoginURL(false, false) [Client.php:1625]
2C49 .| | | | => CAS_Client::getURL() [Client.php:342]
2C49 .| | | | <= 'https://localhost/welfareManager'
2C49 .| | | <= 'https://cas.byu.edu/cas/login?service=https%3A%2F%2Flocalhost%2FwelfareManager'
2C49 .| | | Redirect to : https://cas.byu.edu/cas/login?service=https%3A%2F%2Flocalhost%2FwelfareManager [Client.php:1632]
2C49 .| | | exit()
2C49 .| | | -
2C49 .| | -
2C49 .|
ネットワーク ログを開くと、次のように表示されます。
それは私をリダイレクトしていません:( .