会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。
Coo > 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/2 18:37 |
---|
たぶん認証プレフィックス機能がうまく理解できていないのだと思います・・・ご教授ください。
先日、v3.0.7にUPしたのですが、それまでv3.0.6で日本語の会員専用ブログを用意し正常作動していました。 今回、英語の会員専用ブログも追加することになりました。 どちらも今までの日本語ブログと同じ ID/PW で見れるようにしたいのですが、 ログイン画面は 日本語ブログ⇒日本語ログイン画面 英語ブログ⇒英語ログイン画面 と表示したいです。 用意されている認証プレフィックス設定を利用し front :日本語、mypage :英語 と割り当て、ユーザーグループの認証プレフィックスで両方をチェックし(v.3.0.7の新機能) なんとか想定動作は実現できました。 が、ログイン画面のデザインが異なってしまいます。 日本語・・・メニュー、フッダが表示される ※キャプチャ1 英語(今回追加)・・・メニュー、フッダが表示されないシンプルな画面 ※キャプチャ2 ログイン画面のデザインを同じにするには、どうしたら良いでしょうか。 ■調整した箇所 ▽認証プレフィックス設定 で front,mypage を有効にする app/Config/setting.php
▽User 用のログイン画面の調整。 /bcms/lib/Baser/View/Users/admin/login.php 画面タイトル を固定にし、PW問い合わせを削除する。 ※v3.0.6 では テーマ/Users/login.php にコピーして調整していたのですが、今回デザインが崩れました。 画面上部に表示されるべきメニューが、ログインボタンの下、フッダのすぐ上に表示されてしまいます。 ※キャプチャ3 全く同じファイルなのですが、コアファイルと置き換えたところ デザインが正しく表示されたので、それで回避している状況です。 ▽mypage 用のログイン画面の調整。 テーマ/Members/mypage/login.php /bcms/lib/Baser/View/Members をテーマにコピー。 画面タイトル、アカウント、パスワード を英語表記にし、PW問い合わせを削除する。 ▽直接ブログにアクセスされた場合、未ログインの場合はログイン画面を表示 テーマ/Layouts/default.php (日本語ページ用),e_default.php (英語ページ用に用意したもの) ページ先頭に追記。
※参照ページ: デザイナーさんでも出来る! baserCMS のプレフィックス認証機能を使ったログイン画面の作り方 ▽管理ツールでユーザーグループの認証プレフィックス設定。 「 会員専用」「MemberOnly」にチェック。 ※すでに登録してあったユーザーグループの、認証プレフィックスを変更しました。 なお、新規ユーザーグループを作れませんでした。どう入力してもエラーになります。 「入力エラーです。内容を修正してください。 認証プレフィックスを入力してください。」 ▽このユーザーグループに、ユーザーアカウント「member」が登録済です。 ※実装済だった日本語会ブログ用のアカウントです。 できれば、日本語ログインのデザインにしたいですが、英語ログインのデザインでも構いません。 よろしくお願いします。 ■ BaserCMSのバージョン:3.0.6.1→3.0.7 |
Coo > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/3 11:32 |
---|
英語ログインがうまく動作していないことがわかりました。
正しいID/PWを入力してログインすると、しばらくそのまま待たされてエラーになります。 昨日はうまくいっていたと思うのですが、勘違いだったのかもしれません・・・ ▽IE11:baserCMS のエラー画面 不正なリクエストと判断されました。(type:csrf)CSRF対策によるエラーです。 リクエストに含まれるCSRFトークンが不正または無効である可能性があります。 Request URL: /mypage/members/login ▽Chrome:Webのエラー画面 このウェブページにはリダイレクト ループが含まれています. http://xxxxx のウェブページは リダイレクトの回数が多すぎます。このサイトの Cookie を削除するか、 サードパーティの Cookie を許可すると問題が解決することがあります。 引き続き問題が解決しない場合は、ご使用のコンピュータではなく、サーバー側の設定上の問題である 可能性があります。 この問題の詳細については、こちらをご覧ください。 エラー コード: ERR_TOO_MANY_REDIRECTS ▽firefox:Webのエラー画面 ページの自動転送設定が正しくありません このアドレスへのリクエストに対するサーバの自動転送設定がループしています。 Cookie を無効化したり拒否していることにより、この問題が発生している可能性もあります。 ●デバック状況 IE11はbaserCMSのエラーでしたので、デバックモードにして確認しました。 error.log の内容です。 ---------------------------------- 2015-04-03 11:13:40 Error: [BadRequestException] 不正なリクエストと判断されました。(type:csrf)CSRF対策によるエラーです。リクエストに含まれるCSRFトークンが不正または無効である可能性があります。 Request URL: /mypage/members/login Stack Trace: #0 [internal function]: BcAppController->_blackHoleCallback('csrf') #1 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Controller/Component/SecurityComponent.php(623): call_user_func_array(Array, Array) #2 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Controller/Component/SecurityComponent.php(337): SecurityComponent->_callback(Object(MembersController), '_blackHoleCallb...', Array) #3 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Controller/Component/SecurityComponent.php(242): SecurityComponent->blackHole(Object(MembersController), 'csrf') #4 [internal function]: SecurityComponent->startup(Object(MembersController)) #5 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Utility/ObjectCollection.php(128): call_user_func_array(Array, Array) #6 [internal function]: ObjectCollection->trigger(Object(CakeEvent)) #7 /home/users/1/lolipop.XXXXX/web/bcms/lib/Baser/Event/CakeEventManager.php(244): call_user_func(Array, Object(CakeEvent)) #8 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Controller/Controller.php(675): CakeEventManager->dispatch(Object(CakeEvent)) #9 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Routing/Dispatcher.php(187): Controller->startupProcess() #10 /home/users/1/lolipop.XXXXX/web/bcms/lib/Cake/Routing/Dispatcher.php(165): Dispatcher->_invoke(Object(MembersController), Object(CakeRequest)) #11 /home/users/1/lolipop.XXXXX/web/bcms/app/webroot/index.php(151): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse)) #12 {main} 2015-04-03 11:14:29 Error: [MissingControllerException] Controller class Robots.txtController could not be found. Exception Attributes: array ( 'class' => 'Robots.txtController', 'plugin' => NULL, ) Request URL: /robots.txt Stack Trace: #0 /home/users/1/lolipop.XXXXX/web/bcms/app/webroot/index.php(151): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse)) #1 {main} ---------------------------------- ●日本語ログインは正常に行えます。 日本語でログイン済になれば、英語ログインは不要になるので、英語の会員ブログも正常に表示されます。 ●ログイン画面は日本語・英語共通にして、Call元に合わせて表示先を変更する という方法でも良いのですが。 「日本語 会員ブログ」をクリック ⇒ 日本語・英語 共通のログイン画面 ⇒日本語 会員ブログ 「英語 会員ブログ」をクリック ⇒ 日本語・英語 共通のログイン画面 ⇒英語 会員ブログ 何かお分かりになりましたらご教授ください。 ■ BaserCMSのバージョン:3.0.6.1→3.0.7 |
n1215 > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/9 0:57 |
---|
Coo 様
まずはリダイレクトループ周りから解消しましょうか ご提示いただいたコードではLocationヘッダに相対パスを記述されていますが、 Locationヘッダの値はRFCでは絶対URI(http:// や https:// などスキーム名を含むパス)と決まっています。 まずはその点を修正していただければと思います。 【参考】 RFC 2616 Header Field Definitions http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 引用:
Twitter: @n_1215 |
Coo > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/9 16:07 |
---|
n1215 様
ご教授ありがとうございます。 絶対パスに変更してみましたが、http://www.XXXX/mypage/members/login で表示されるログイン画面で正しいID/PWをするとリダイレクトループになります。
エラーメッセージが http://www.XXXX/e_member_contents/index のウェブページは リダイレクトの回数が多すぎます。 となっています。
をコメントアウトするとブログが表示されます。 つまり、 /mypage/members/login でログインしているのに
で 未ログインの判定 となり、if文の中に入る。/mypage/members/login へ戻される ということを繰り返しているようです。 /mypage/members/login でログイン済の判断は
では間違っている ということのように思えてきました。 ■ BaserCMSのバージョン:3.0.6.1→3.0.7 |
n1215 > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/12 18:54 |
---|
Coo 様
3.0.7での変更点の1つに、複数認証プレフィックスへの対応(管理画面やその他のマイページ画面に対し別々にログイン状態を管理できるようにする)というものがありました。 この変更の副作用で、デフォルト以外のログインユーザの取得が上手くいかなくなっているようです。 この問題は根が深そうなので、現時点では、 セッションの値を直接調べて判定するのが暫定的な解決策になるのではないかと思います。
本来はViewでやるよりControllerのbeforeFilterあたりで処理すべきという感じではありますが。 Twitter: @n_1215 |
n1215 > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/13 22:30 |
---|
追記です。 セッションキーを管理画面と同じ'User'に変更して共有すると3.0.6.1以前とほぼ同様にBcAuthComponentが動くようです。 もし、プレフィックスごとにログイン状態を独立して管理したいという要望がなければ、 前回の返信のように小細工をするより、セッションキーを共有にするほうが手っ取り早いと思います。 また、3.0.7リリース後にプレフィックス認証の仕組の調整が入っています。 セッションキーを共有にして上手く動かない場合はGitHubの最新版を試すという手もありかもしれません。 https://github.com/baserproject/basercms/commit/2e6467f8527c9e6aa6bac1c660580dd691febd68 Twitter: @n_1215 |
Coo > Re: 会員専用の日本語ページと英語ページに、同じID_PWで、ログイン画面は別 でログインしたい。 @ 2015/4/14 21:35 |
---|
n1215様
いつもご回答ありがとうございます。 ログインしていれば、日本語も英語も見ることができてOKですので、 プレフィックスごとにログイン状態を独立して管理したい」という要望はありません。 メニュー「日本語 会員ブログ」をクリック ⇒ 日本語・英語 共通のログイン画面 ⇒日本語 会員ブログ メニュー「英語 会員ブログ」をクリック ⇒ 日本語・英語 共通のログイン画面 ⇒英語 会員ブログ と切り分けたいので「どのメニューをクリックしたか」をログイン画面で判断し、 リダイレクト先を振り分けるという方針に変更しようと思います。 ※WEBシステムに慣れていないので調べながら実装を試みてみます。 ありがとうございました。 デザインが「User」「Member]で異なってしまうのも、認証プリフィックスの新機能の影響があるのでしょうかね。。。正しい状態がうまく把握できていません。。。 ■ BaserCMSのバージョン:3.0.6.1→3.0.7 |