OpenPNE は管理画面を別ドメインにすることができます。別ドメインにすると Basci 認証などでアクセス制限が簡単にできます。OpenPNE のセットアップガイドにもその方法が明記されています。(なぜかこの OpenPNE の trac にあるセットアップガイドを Mac の Firefox で開くと HTML ソースが表示されてしまう。Safari だと正しく表示される。私の Firefox がおかしいのかな?)

しかし、OpenPNE を http://example.com/openpne/ などのようにディレクトリ内で公開している場合は注意が必要です。
OpenPNE: http://example.com/openpne/
管理画面: http://admin.example.com/
で設定した場合、管理画面にはログインできなくなってしまいます。

原因は、PEAR::Auth のサブクラスの OpenPNE_Auth クラスで OpenPNE の URL からクッキーのパスを設定するためです。上記の URL の場合はクッキーのパスは /openpne/ になります。管理画面でのクッキーのパスもこれを使用します。しかしクッキーを保存する際のパスは / のため、ログインに成功してもその後のページを表示する際にクッキーのパス /openpne/ でクッキーを読もうとして読めずに未ログイン状態となり、再度ログインページが表示されてしまいます。

本来は管理画面の URL を認識して管理画面のクッキーの場合はその URL からパスを取得するべきです。急場の対策として、OpenPNE/Auth.php の 86行目をコメントアウトすることにより対処しました。

// cookie_path を OPENPNE_URLから抜き出す
$url = parse_url(OPENPNE_URL);
if (substr($url['path'], -1) != '/') {
    $url['path'] .= '/';
}
//$this->cookie_path = $url['path'];    <= コメントアウト

関連する投稿