ブログ機能の任意の記事にパスワードをつける

お世話になっております。
タイトル通りにbaserCMSのブログ機能について、ブログ全体ではなく、任意の記事にパスワードを設定し、パスワードを知っている者であれば閲覧できるような制限をしたいと考えております。
baserCMSを使わないで単一のページであればできたのですが、baserCMSのどこにどういったものを設定すれば良いのか解らず教えて頂きたいです。

【環境情報】
・baserCMSのバージョン: 4.6.0
・レンタルサーバー名:ロリポップ
・使用テーマ:bc_sample
・PHPスキル(自己評価): 全くわからない

ryuringさんのプラグインを使ってみるのはどうでしょうか?

GUSSANさん
プラグインの紹介ありがとうございます。
早速導入してみたのですが、いじり方が解らず、また自分が思っていたのと違っていました。設定さえすれば自分が思っていた仕様になるのでしょうか?
①どこに対象とするURLを入れたら良いのか解らない。
導入して有効にしただけですべてのブログや他の機能にログインをするように求められました。こちらとしては特定のブログで任意で記事にパスワードをつけたいです
②ID及びパスワードを求められるがパスワードのみ入力してクリアするようにしたい。
(setting.phpの ‘sessionKey’ => ‘Admin’,の’Admin’部分に任意の単語(1234など)を入れて更新したのですが、IDを求められる上に任意の単語を入れてもログインできませんでした。)
こちらはJavaScriptで作るパスワード認証を想定しております(ワンクッションが目的のために強固な認証機能は不要です)

本当に申し訳ないのですが、全然phpのことが解らないので見当違いなことをしてるかと思います。
受け身の姿勢はどうなのかと自分でも思うのですが検索の仕方も今一度解らないので本当に色々ご迷惑をおかけしています…。

詳しい使い方は、@ryuring さんが教えてくださるかもしれません。

まったく@yachiyo さんのご意向通りというのは難しいかもしれませんが、ある程度は、可能かと。。。いずれにしてもスキル次第かと思います。
ですが、そもそも、ブログの記事単位で認証をかけるという要件にはこのプレフィックスのフロント認証は不向きかもしれません(紹介しておいてすいません)。というのも、一々コンフィグファイルなどに記事が追加される毎に設定を加えるというもの運用に乗らない気もしますんで。どちらかというと会員ページやメンバーページなどに利用するイメージの方が合っているように思います。

対象のURLを設定する方法は、いくつかあると思いますが、例えば、/blog/archives/1/blog/archives/2を認証の対象としたければ、
/app/Plugin/FrontAuth/Event/FrontAuthControllerEventListener.phpを以下のようにする感じです。

		// 認証されていない場合はログイン画面にリダイレクト
		if (!$Controller->BcAuth->user()) {
			$Controller->redirect($Controller->BcAuth->loginAction);
		}

に条件分岐を加えて、

		// 認証対象URLが認証されていない場合はログイン画面にリダイレクト
		if (preg_match('/blog\/archives\/1|blog\/archives\/2/', $Controller->request->url) && !$Controller->BcAuth->user()) {
			$Controller->redirect($Controller->BcAuth->loginAction);
		}

であれば、おっしゃるようにJavaScriptの簡易パスワード認証などをプログ記事本文に記載するような感じですかね?
「JavaScript」「パスワード認証」とかでググればたくさんヒットしますが、例えば、以下など。

GUSSANさん
丁寧なお返事ありがとうございます。
今回のはそうなんですね……>会員ページやメンバーページなどに利用するイメージの方があっている
こういう方法もあると教えて頂いて有難いです(ただ今回は不向きでした)。それから解説も丁寧にありがとうございます。ちょっと試してみてなるほど…と勉強させて頂いてます。

そうです!おっしゃるように簡易パスワード認証などをブログ記事本文に記載するようなかんじです。
リンクを貼っていただいたJavaScriptのものを一つひとつ手打ちするのではなく、公開状態や公開日時などの所で設定できればなあと思っております。
もしも出来るのであれば、自分の所に実装したいので教えて頂きたいです。
よろしくお願いします。

@yachiyo やはり、PHPの知識がないと実装が難しそうに思えます。
パスワードの設定を公開状態や公開日時などの所で設定できるようにするのは、下記のページなどを参考にすればできそうですが、実際のパスワードの突き合わせの部分が問題が出そうです。

上記ページのように独自のフィールドを設定すると、記事の詳細画面でそのデータを参照することはできます。ただ、その後の制御をJavascript にするとなるとパスワードをhiddenタグなどでソースコードに埋め込む形にせざるを得ないかと。

PHPでやるとなると次のような感じでしょうか。けっこうめんどいです。

  • 対象ページを開く
  • パスワードが設定されているかチェック
  • 設定されていれば独自の認証画面にリダイレクト
  • パスワードを入力し、DBに問い合わせて確認
  • 間違っていればエラー
  • 間違っていなければセッションに対象ページが認証済であることを記録
  • 対象ページにリダイレクト

年越しでちょっと慌ただしくて、お返事遅れてすいません :man_bowing:

というご要望も、ryuringさんのご指摘と同様にやはりそれなりにPHPの知識がないと難しいと思います。。。
たとえば、簡易パスワード認証のJavaScriptをjs(外部ファイル)などに書き出して、特定のタグやカテゴリーを判定基準にしたif構文で記事毎に呼び出すようなことであれば、意外に運用に乗るのかもしれませんが、
その場合は、ほぼ、一括したパスワードの運用になりますし、どこまでご希望のファンクションが実現できるかどうか。。。いずれにしても、PHPの知識がいるかな?と。

そもそも、なぜ、なんちゃってパスワード認証(あえてそう呼ばせてもらいます)のようなものが必要なのか、いまいち、イメージが湧きません。。。

こちらも年末でお返事送れててすみません。あけましておめでとうございます。

ryuringさん
具体的な記事有難うございます!普段気軽に利用しているパスワード認証ってとてもややこしいんですね……!javascriptでするにしてもソースで埋め込む方になるんですね。
情報ありがとうございます。

GUSSANさん
一括したパスワードの運用で問題は無いんですがどうしたってPHPの知識がいるんですね……。手打ちでした方が知識無い者が触って全体をわやにしなくて良いですかね……。
解決はしてないのですが代替案はありますし私の技量が足らなくてこれ以上はないかと思うので解決済みとします。
パスワード認証を実装したい理由なのですが、個人のファンサイトで利用する為です。そのファンであれば解る単語などを入力したら特定の記事を閲覧できるようにする目的でした。

そうですね、baserCMSは、そもそもphpで書かれたCMSですので、やはりPHPの知識無しというわけにはいかないと思います。

「手打ち」とは、一字一句、キーボードで打つという意味でしょうか?
どこかにテキストを置いておいて、コピペすればいかがでしょうか?

ファンなら誰でも知ってる単語さえしっていればつまり誰でも見れるんですよね?それって認証、必要です?!
単に意地悪なだけのような。。。w
本当に、そのファンで認証をくぐり抜けないとみてはいけないような記事ならば、当然、会員制のような認証手続きを踏むべきでしょうが、みてはいけないような記事でないのであれば、webで公開しているのだから誰でもあたりまえに見れるべきな気がします。。。

@yachiyo

basercms触り初めてばかりで勉強中ですがちょっとプラグイン作ってみました。

WordPressにあるような簡易パスワード保護機能なのであまり使えないかもしれませんが、一応共有させていただきます。
(現在、無料プラグインとして公開申請中です。)

ダウンロードして解凍してからBlogPostPassword-mainをBlogPostPasswordにリネームして下さい。

「いいね!」 1

フロントでは詳細本文がなくなりパスワードフォームが表示されるようになります。
なお、WordPressと同じくクッキーを利用したパスワード保護の方法になりますので、過信は禁物です。

「いいね!」 1

@tera3
要件通りのことが実現できそうですね、ありがとうございます!

解決したつもりだったんですけどありがとうございます…!

GUSSANさん
ちょっとphpの勉強しながら頑張らなきゃなあと思いました。読みとけるように頑張らないと…!
ごめんなさい手打ちは『システムをいじらずに入力する』意味で使ってます。流石に一字一句キーボードで打つと大変なのでコピペします。ありがとうございます!
実は私も誰でもわかるようなパスを入力させる流れの必要性があまりよく解らないんですよねwwでど、界隈全体がそう(ほとんどが簡単なパスワード認証によるワンクッションを置く)なのでまあ右に倣えでするしかないかなあと……。

tera3さん
ありがとうございます!思っていた通りのプラグインです!
早速実装したのですが、パスワードを送信したあとに直ぐに該当の記事に飛ばず、https://hoge.jp/【baserCMSを入れているフォルダ】/blog_post_password/blog_post_passwords/password_check/2/196というアドレスに飛ばされてしまいます。再度読み込みをすると該当記事を開くのですが…。ロリポップの簡単インストールをすると普通とは違った挙動をするようなのでそれと関係あるんですかね…?

@yachiyo
パスワードフォームの送信はjsを介して行っていますが、
フロントの「blog_post_password.js」のjsのパスがお使いの環境で違う可能性があるので直していただく、もしくは他のjsがエラーを起こして、うまくblog_post_password.jsが機能していない可能性があります。

なのでそのままjsを介さずにフォームが送信されてしまっている状態だと思います。

tera3さん
お返事ありがとうございます。
実際に動いているページで見てみるとjsのパスはあっているようでしたので他のjsがエラーを起こして上手く機能していないみたいでした。ちょっと自分でどうにかできるように頑張ります。
素敵なプラグインありがとうございました。