Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2007-08-20 17:53:50

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

【一部表現の訂正と追加をしました:2007-08-28】
お暑うございます。
また質問させてください。

たとえば http://example.com/ というURL下でNucleusを使用していて、sandbox という名前の複数ブログを作り、これをこの sandbox のみを NP_AccessControl で「ログイン・ユーザーに限定」に設定します。
NP_CustomURL を併用しておりますので http://example.com/sandbox/ にアクセスすると、 NP_AccessControl 関連で設定したログインフォームが表示されます。
ここで所定の ID とパスワードを入れるとエラーページが表示されて、そのときのブラウザの URL 欄が以下のようになっています。

http://example.com/index.php?virtualpath=sandbox?page=0

じつはこの状態でも、ログイン自体は成功しているので、再度 http://example.com/sandbox/ にアクセスすれば正常な表示になります。
原因や対策についてお心当たりがありましたら、よろしくお願いいたします。

使用環境と URL に関係しそうなプラグインは以下の通りです。
Nucleus CMS v3.3 UTF-8
NP_CustomURL
NP_AccessControl
NP_MultipleCategories

オフライン

#2 2007-08-20 20:08:19

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_AccessControl でログインがうまくいきません

virtualpath=...
というのはCustomURLのためにApacheのmod_rewriteで変換しているURLですね。
今のAccessControlの仕様では,渡されたURLをそのままでリダイレクトするようになっているので,
その部分を http://example.com/sandbox/ にするのは困難です(AccessControlからは最初に
Apacheに渡されたURLを調べることはできないから)。
スキンタイプを調べてURLを生成するようにすれば,なんとかできないことはないですが,ちょっと面倒ですね。
ただ,エラーが出るというのはよく分からないです。CustomURLが内部で使っているURLでアクセスしているだけなので。

オフライン

#3 2007-08-24 18:50:26

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

Andy さんの発言:

virtualpath=...
というのはCustomURLのためにApacheのmod_rewriteで変換しているURLですね。
今のAccessControlの仕様では,渡されたURLをそのままでリダイレクトするようになっているので,
その部分を http://example.com/sandbox/ にするのは困難です(AccessControlからは最初に
Apacheに渡されたURLを調べることはできないから)。

NP_AccessControl はそういう仕組みだったのですね。
ということは、先般別件で解決したとはいえ、また CustomURL と .htaccess がらみの気配が…。

その後の試行錯誤でわかったことです。

http://example.com/index.php?virtualpath=sandbox?page=0

では、エラー*になるものの、最後尾のオプションを消した

http://example.com/index.php?virtualpath=sandbox

だと表示されることがわかりました。また

http://example.com/index.php?page=0

なら、グローバル設定で「規定のBlog」に指定した親ブログのページが問題なく表示されます。
* 正確にはCustomURLで設定した「URI に該当するデータが存在しなかった場合の挙動」(=404を選択)によるスキンのエラーページです。
うーん、うーん…。

オフライン

#4 2007-08-24 20:07:15

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_AccessControl でログインがうまくいきません

page=0というパラメータを誰が加えているのかが問題になりそうですね。

オフライン

#5 2007-08-25 05:45:20

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

Andy さんの発言:

page=0というパラメータを誰が加えているのかが問題になりそうですね。

そ、そのキーワードで検索でしたか…お心遣い感謝します orz
見つけました。この記事ですね。

NP_ShowBlogsに加えて使用している NP_SearchResultsEXも同様の挙動でした。
両方を削除して(登録リストのアップデート後に)試すと、みごと、 AccessControl でのログイン直後のURLが http://example.com/index.php?virtualpath=sandbox と、?page=0 なしになりました。

この ?page=0 って、おそらくページスイッチの2ページ以降から1ページ目とかに戻るときに意味があるんだろうな、とは思ったのですが、なんでゼロ?と思い、ためしに NP_ShowBlogs2.7 の628行目に、こんなのを落書きしてみました。

$pagelink = str_replace('?page=0','',$pagelink);//sucoshi contaminated

でもやっぱりダメでした orz

とはいえ、こういうオーソドックスなプラグインの組み合わせですし、前述のこの記事も、とくに不具合の報告っていうわけじゃないんですよね。
ほとんどのみなさんは、CustomURLを併用しながらサブブログにAccessControlをかけて?page=0が出ても、問題なくそのブログが表示されるということなんでしょうね…。
うーん、うーん…

オフライン

#6 2007-08-29 06:08:40

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

自己レスです。
?page=0が追加される原因はわかったのですが、効果的な対策の方法がまるで思いつかず、頓挫しました。
が、以下のバカテクで当座を凌ぐことにしました。

1. PHPファイルを作って新規ブログを立てる方法で、以下のPHPファイルを作成

<?php

$CONF['Self'] = 'sandbox.php';

include('./config.php');

selectBlog('sandbox');
selector();

?>

2. Blog設定の編集は以下のとおり
--(通常の)Blog設定
・URL - http://example.com/sandbox
--Options for NP_CustomURL
・このブログで URI の別名を使用する - はい
・ノーマルの URL でアクセスがあった時にリダイレクトしますか? - はい
・検索の時の URL を 「/search/検索語」にリダイレクトしますか? - いいえ
・このブログのリクエスト URI - sandbox

これで、http://example.com/sandbox.php へアクセスして、AccessControl 経由のログイン画面ののち、URLの末尾が/sandbox.php?page=0になっても、エラー処理には移らず表示できました。

なにがどうなってるのか、なんとなくわかるようで、キチンと説明できないのでバカテクなのですが、同種のトラブルでお悩みの奇特な方がいらっしゃいましたら、こんなかんじで凌いでみてください。

オフライン

#7 2008-06-02 16:24:43

boff
メンバー
From: Fukuoka
登録日: 2006-10-11
投稿: 149
ウェブサイト

Re: NP_AccessControl でログインがうまくいきません

先ほどNP_AccessControlを導入してみて、sucoshiさんとまったく同じ現象が起こっています。

とくに、相談というわけではなく、参考になりましたというご挨拶です。


ちなみに、私の場合は、AccessControlのログイン画面でログイン後に表示されるエラーページを、改めてブラウザのブックマークに登録されている当該ページを開くことで対応しています。

これって、とくに問題があるということではないですよね? :oops:


・Nucleus CMS v3.41RC
・PHP 5.2.17
・MySQL 4.1.25
・Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e

オフライン

#8 2008-06-22 16:01:00

sagara
メンバー
登録日: 2008-05-04
投稿: 10

Re: NP_AccessControl でログインがうまくいきません

>sucoshi さん

バカテク参考にさせていただきました。ありがとうございます。

ログインすることでトップページを開くことが出来ましたが、個別ページやカテゴリページへ遷移できなくなってしまいました。

難しい問題ですね。。。

オフライン

#9 2008-07-07 05:27:18

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

こんにちは。

sagara さんの発言:

ログインすることでトップページを開くことが出来ましたが、個別ページやカテゴリページへ遷移できなくなってしまいました。

難しい問題ですね。。。

むむむ…そうなんですよね。ログインだけを円滑にするバカテクだったので、ログインはできても、その後ダメダメってかんじで。

ということで、バカテク第2弾!

<%if(loggedin)%><h3>スタッフ・協力者の方へ</h3>
<p>以下のリンクをクリックしてみてください。</p>
<ul>
<li>あなたが開こうとしたページ:<a href="<%referer%>"><%referer%></a></li>
</ul><%endif%>

こんな記述を、404エラーのときに表示されるページ=NP_AccessControlでアクセス制限したブログが使うスキンのエラーページに書いておきます(ややこしくてすみません)。
# H3タグその他の構造を使っているのはうちのサイトの便宜的なものです。再利用される場合はセマンテックにH1~6その他を使い分けてください
通常の場合は、以下のような優先関係になるんじゃないかと思います。

ブログに設定したスキンのエラーページ || グローバル設定スキンのエラーページ || .htaccessで設定した404対応のページ(UNIX系Apacheの場合)

これらは、左側から順に優先されて404エラーのときに表示されるわけです。私の環境では、個別のブログ用スキンにはエラーページを設定しない運用なので、グローバル用スキンのエラーページに書いてみました。
やっていることはNP_ShowBlogs類とNP_AccessControlを併用している場合、page=0問題で404エラーが出たときに本来アクセスしたかったはずのURLを提示するというものです。
こうしておけば、ワンクリックプラスするだけでスルーできるようになるはずです。

オフライン

#10 2008-08-18 08:43:07

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

こんにちは。
バカテク2で比較的平和に運用していたのですが、スタッフさんから「ログアウトしたページから再度入ろうとすると永久に入れない」と激しく怒られました。
たとえばこんなことです。

http://example.com/memberroom?action=logout

NP_AccessControl でアクセス制限をかけたブログからログアウトすると、画面はログインページへと遷移して、URLが上記の状態になります。
で、この状態から再度ログインしようとすると、(このスレッドの出自由来の事情で)やっぱり一発目はログインエラーになるのですが、バカテク2の効果で「開こうとしたページ」のリンクが表示されるはず…なんですが、ここに罠が…。
そうなんです。バカテク2はログインエラーになる直前のページURLを表示するので、そのURLは http://example.com/memberroom?action=logout ということです。
つまりこれ、クリックした途端「ログアウトしました」状態からやり直しなわけですよね
この操作をやってる限り、本当に永遠にログインできないわけです。うへえ :oops:

というわけで、バカテク2.5弾です!

<%if(loggedin)%>
<h3>スタッフ・協力者の方へ</h3>
<p>以下のリンクをクリックしてみてください。</p>
<ul>
<li>あなたが開こうとしたページ:<a href="<%referer%>" id="recover"><%referer%></a></li>
</ul>
<script type="text/javascript">
//<![CDATA[
var $excessanchor=document.getElementById('recover');
var $referer=$excessanchor.href;
var $options=new RegExp("\\?");
if($referer.match($options)){
    $excessanchor.href=RegExp.leftContext+"/";
    $excessanchor.firstChild.nodeValue=RegExp.leftContext+"/";
}
//]]>
</script>
<%endif%>

DOMを利用して、クリックしたら失敗するログアウト時のURLの「?」以降をぶった切って、代わりに「/」で閉じるようにしてみました。
NP_AccessControl で制限をかけてあるブログにログイン失敗した際表示されるエラーページの記述を、こんなかんじにしてみてください。
もしそのページにすでに id="recover" が使われていた場合は、上記の recover を一律べつの id 文字列に差し替えてみてください(「yarinaoshi」とか)。
念のため、上記のコードは XHTML 準拠で SCRIPT タグ内部をコメント化というか、文字列化してあります。動作的には問題ないと思うのですが、より正しい HTML 表記をお望みの場合は、HTML4環境なら //<![CDATA[ ~ //]]> を <!-- ~ //--> に置き換えてみてください。

オフライン

#11 2010-02-06 04:30:16

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

あれから一年半たちました。
一部で激しく評判の悪いバカテク2.5を打開すべく、さらなる所業に及びました。
バカテク3です。

NP_AccessControl.phpの260行目を書き換えます。

//	sucoshi+yamabuki
		$zerouri=str_replace('?page=0','',$_SERVER['REQUEST_URI']);
//		$url = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
		$url = 'http://' . $_SERVER["HTTP_HOST"] . $zerouri;

かなり無理やりですが、これでこれまでの問題だった「?page=0」はキレイサッパリ消せます。
当然、エラーにはなりません。

が、自信がありません。
これで問題が出る挙動って、どういうものがありますでしょうか。
思いつく方、思いつくこと、なんでもお願いします。

オフライン

#12 2010-02-06 13:31:15

yama
Administrator
登録日: 2005-07-07
投稿: 1,277
ウェブサイト

Re: NP_AccessControl でログインがうまくいきません

特に副作用はなさそうに思います。

オフライン

#13 2010-02-06 21:48:54

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

ありがとうございます!

本来なら、動作の経緯的にもShowBlogsのほうに対策を施すべきかなと思うのですが、フォーラムやGoogle検索でざざっと見る限り、「page=0」が問題になっているのは、AccessControlとの組み合わせの本件くらいのようです。動作の順番でも、AccessControlのほうが後なのと、ShowBlogsの中身よりわかりやすかったので、上記の改造に至りました。

もし今後も大きな問題がないようでしたら、これを反映してアップロードしたいのですが、どうすればいいのでしょうか。

オフライン

#14 2010-02-07 10:36:19

yama
Administrator
登録日: 2005-07-07
投稿: 1,277
ウェブサイト

Re: NP_AccessControl でログインがうまくいきません

sucoshi さんの発言:

もし今後も大きな問題がないようでしたら、これを反映してアップロードしたいのですが、どうすればいいのでしょうか。

おお、ありがとうございます。ぜひぜひ。

NP_AccessControlのトピを見ると
http://japan.nucleuscms.org/wiki/plugins:accesscontrol
上記のwikiページからダウンロードするようになっているので、このwikiページに新しいアーカイブをアップロードしてwikiページを更新していただけますでしょうか。ちょっと面倒ですけど。分からないことがあれば気軽に聞いてください。

http://japan.nucleuscms.org/wiki/plugins
あるいは上記ページの冒頭に書いてあるように

フォーラムに自作プラグインのサポートトピックを適当に立ててファイルをアップロードし、ファイルのURLを直リンクで当wikiに貼り付けてください。フォーラムのトピックを見ればダウンロード数が分かります。たとえばこのような感じです。

このようにしていただくのもいいかも。トピはすでに立てられているので、そこに投稿を一件追加する感じでよいと思います。

オフライン

#15 2010-02-11 07:04:41

sucoshi
メンバー
登録日: 2007-04-09
投稿: 68

Re: NP_AccessControl でログインがうまくいきません

お教えいただいた方法(フォーラムに投稿・アップロード→wikiを編集)で「1.41b」として公開しました
もし手順や作法を間違えているようでしたら、ご指摘いただければ幸いです。

オフライン

Board footer