『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について

momo_r > 『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について @ 2018/5/11 16:51
いつもbaserCMSを使わせていただき、大変お世話になっております。
リダイレクトの設定に関して投稿させていただきました。

baserCMSで生成されたURLの末尾に『?preview=a』を付与すると管理画面にリダイレクトされてしまうようです。
※すべてのURLではなく一部URLのようです。

localhost/basercmsにbaserCMSをインストールしたと仮定します。
baserCMSのバージョンは最新の4.1.0.1で、インストールしたままの状態(初期状態)です。

http://localhost/basercms/?preview=a
これは管理画面にはリダイレクトしません。

http://localhost/basercms/news/?preview=a
これは管理画面にリダイレクトしてしまいます。

管理画面のURLは外部に流出させたくありません。
対応としましては
プレビューを実施するキーワードとして『preview』ではなく、こちら側で指定した文字列を使える仕様があれば望ましいです。
もしくは未ログイン状態で『?preview=a』を付与してアクセスしてもリダイレクトさせない設定があればと考えております。

お手数ですが、こちらご確認よろしくお願いいたします。
momo_r > Re: 『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について @ 2018/5/11 22:51
お世話になっております。
先程の書き込み後、改めて調査をしたところ下記の修正を行うことで管理画面へのリダイレクトがされなくなりました。


localhost/basercms/lib/Baser/Routing/Route/BcContentsRoute.php 41行目〜45行目

こちらのif文のコメントに
『管理システムにログインしているかつプレビューの場合は公開状態のステータスは無視する』
とあるのですが、処理の流れ的にここでは管理システムにログインしているか否かのチェックはしていないように見えたので
44行目の
$publish = false;


if (BcUtil::loginUser()) $publish = false;

と修正いたしました。


また、93行目〜97行目の処理で管理画面URLでリダイレクトしているようでしたのですべてコメントアウトいたしました。
// if((!empty($request->query['preview']) || !empty($request->query['force'])) && !BcUtil::loginUser()) {
// 	$_SESSION['Auth']['redirect'] = $_SERVER['REQUEST_URI'];
// 	header('Location: ' . topLevelUrl(false) . baseUrl() . Configure::read('BcAuthPrefix.admin.alias') . '/users/login');
// 	exit();
// }



こちら『diff -u』の結果になります。
$ diff -u Baser.bk/Routing/Route/BcContentsRoute.php Baser/Routing/Route/BcContentsRoute.php
--- Baser.bk/Routing/Route/BcContentsRoute.php  2018-03-20 17:22:57.000000000 +0900
+++ Baser/Routing/Route/BcContentsRoute.php     2018-05-11 22:29:00.068303088 +0900
@@ -41,7 +41,7 @@
                //管理システムにログインしているかつプレビューの場合は公開状態のステータスは無視する
                $publish = true;
                if(!empty($request->query['preview']) || !empty($request->query['force'])) {
-                       $publish = false;
+                       if (BcUtil::loginUser()) $publish = false;
                }

                if(!empty($request->query['host'])) {
@@ -90,11 +90,11 @@
                }

                // データが存在してもプレビューで管理システムにログインしていない場合はログイン画面に遷移
-               if((!empty($request->query['preview']) || !empty($request->query['force'])) && !BcUtil::loginUser()) {
-                       $_SESSION['Auth']['redirect'] = $_SERVER['REQUEST_URI'];
-                       header('Location: ' . topLevelUrl(false) . baseUrl() . Configure::read('BcAuthPrefix.admin.alias') . '/users/login');
-                       exit();
-               }
+               //if((!empty($request->query['preview']) || !empty($request->query['force'])) && !BcUtil::loginUser()) {
+               //      $_SESSION['Auth']['redirect'] = $_SERVER['REQUEST_URI'];
+               //      header('Location: ' . topLevelUrl(false) . baseUrl() . Configure::read('BcAuthPrefix.admin.alias') . '/users/login');
+               //      exit();
+               //}

                if($content['Content']['alias_id'] && !$Content->isPublishById($content['Content']['alias_id'])) {
                        return false;



現状こちらの期待通りの動きがされているのですが、この修正で問題が発生することはないでしょうか?
お手数ですが、ご確認よろしくお願いいたします。
ryuring > Re: 『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について @ 2018/5/13 13:51
こんにちは。

プレビュー用のURLをリクエストした際に、ログイン画面に遷移している理由は次のような動きを想定している為です。

1. Aさんが記事を作成し、公開前にBさんに確認してもらう為にプレビュー用のURLを共有
(例)http://localhost/service?preview=default
2. BさんがURLをリクエストしたが、ログインしていない為、ログイン画面に遷移
3. ログインをすると、ダッシュボードでなく、リクエストしたURLに遷移

今回の修正内容だと、上記のような場合、以下のように手順が増えてしまいます。

1. Aさんが記事を作成し、公開前にBさんに確認してもらう為にプレビュー用のURLを共有
(例)http://localhost/service?preview=default
2. BさんがURLをリクエストしたが、ログインしていない為、Not Fountページを表示
3. ログイン画面のURLを確認して、ログイン画面をリクエスト
4. ログインするとダッシュボードを表示
5. プレビュー用のURLを再度リクエスト

ログイン画面を知らせたくないという事も理解できますので、上の動作とするのか、下の動作とするのかを選択して設定できるようにして頂けるとコアにも取り込むことができそうです。

おっしゃるようにプレビュー用の文字列を変更できるようにするというのもいいかもしれませんね。

なお、設定を追加する場合は、lib/Baser/Config/setting.php に追加します。
設定を変更する場合、app/Config/setting.php で変更するイメージです。

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

ryuring > Re: 『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について @ 2018/5/13 14:04
こんにちは。

取り急ぎチケットを切っておきました。
http://project.e-catchup.jp/issues/21689

Twitter:@ryuring
baserCMS総合サービスサイト ビーコミ

Doguu > Re: 『?preview=a』を指定すると管理画面にリダイレクトされてしまう件について @ 2018/5/14 20:05
この件について修正を実施し、githubのほうにpullリクエストを依頼をさせていただきました。

https://github.com/baserproject/basercms/pull/914

ご確認よろしくお願いいたします。


追記:
修正内容について全く記載しておりませんでしたので追記します。

> 1. Aさんが記事を作成し、公開前にBさんに確認してもらう為にプレビュー用のURLを共有
> (例)http://localhost/service?preview=default
> 2. BさんがURLをリクエストしたが、ログインしていない為、ログイン画面に遷移
> 3. ログインをすると、ダッシュボードでなく、リクエストしたURLに遷移
> 今回の修正内容だと、上記のような場合、以下のように手順が増えてしまいます。
> 1. Aさんが記事を作成し、公開前にBさんに確認してもらう為にプレビュー用のURLを共有
> (例)http://localhost/service?preview=default
> 2. BさんがURLをリクエストしたが、ログインしていない為、Not Fountページを表示
> 3. ログイン画面のURLを確認して、ログイン画面をリクエスト
> 4. ログインするとダッシュボードを表示
> 5. プレビュー用のURLを再度リクエスト
> ログイン画面を知らせたくないという事も理解できますので、上の動作とするのか、下の動作とするのかを選択して設定できるようにして頂けるとコアにも取り込むことができそうです。

コメントでいただいた上記のように『?preview=xxx』や『?force=xxx』を指定された場合の挙動を設定ファイルにて選択できるようにしました。
デフォルト設定は現在の仕様どおり、指定されかつ、未ログインだった場合はログイン画面へリダイレクトする処理となっております。
lib/Baser/Config/setting.php に『BcAuthPrefix.admin.previewRedirect』を追加しました。
boolean値にて設定する仕様で、
trueの場合はリダイレクトして、
falseの場合はリダイレクトしないという感じになっております。

各々設置した環境で修正する場合は
app/Baser/Config/setting.php にて
『BcAuthPrefix.admin.previewRedirect』の値を操作することによって変更します。

ご確認よろしくお願いいたします。






ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
35 人のユーザが現在オンラインです。 (35 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 35