baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか?
| kenecy > baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/8 19:27 |
|---|
|
はじめまして。
会員制サイトを出来るだけ安く早くしかもキレイに立ち上げたくて色々なCMSを探していたらbaserCMSを見つけました。 早速昨日よりトライし始めたのですが、過去の投稿「会員制サイトの構築」 http://forum.basercms.net/modules/newbb/viewtopic.php?viewmode=threadℴ=DESC&topic_id=681&forum=5 を見ますと2012年のver2系時点での情報となっています。 これらの情報はver3系でもそのまま使用できるものでしょうか? 分かる範囲で構いませんので、アドバイスよろしくお願い致します。 ■ BaserCMSのバージョン:3.0.2 |
| goichi > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/8 22:48 |
|---|
|
どんな感じの会員システムにするかによりそうですが、プレフィックス認証機能自体はver.3でもバッチリ存在していますので、過去記事も参考にはなると思います(ただし、CakePHPのメジャーバージョンが変わるなど、大きな変更もありますので、コード等はそれに合わせた書き方になると思います)。
ただ、会員システムにかぎらずCakePHPのバージョンが現行バージョン(2.x)になったことで、色々と情報を集めやすくなったかも知れません。baserCMSそのものの情報でなくとも、CakePHPの情報があれば基本的に適用できると思いますよ(^^ |
| kenecy > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/9 11:11 |
|---|
|
goichiさん。早速のアドバイスをありがとうございます。
どんな感じの会員制サイトかについてですが、マンションの管理組合向けのサイトで以下のようなものを考えています。 ・トップページをログイン画面にして、部屋番号毎のIDとパスワードで住民と関係者以外は一切の内容が見られないクローズドサイト。 ・コンテンツはマンション管理規約や理事会議事録、住民へのお知らせなどを掲載。 ・理事会や管理会社/管理人さんへの要望や問い合わせなどが行える機能。 ・マンション内のイベント開催やコミュニティ形成に役立てられる機能。 ・可能であれば、集会室などの共有施設の予約や予約状況表示などが行える機能。 ・将来的には住民アンケートなどもできるようにしたい。 といった感じで欲張ってますが、まずは上3つぐらいを実現したいと考えています。 なるほど、CakePHPのメジャーバージョンも変わっていたのですね…。 これまでいわゆるLAMP環境でサイトを構築してきたのですが、実はCakePHPを使うのも初めてなのです…。^_^; その為少し戸惑いはありますが、頑張ってやってみます。 実際にやってみてまた何かわからないことがあれば質問させて頂くかもしれません。 その際はどうぞよろしくお願いします。 ■ BaserCMSのバージョン:3.0.2 |
| kenecy > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/9 14:23 |
|---|
|
すみません。
早速試してみましたところ、いきなり詰まってしまいました…。(-_-;) まずは「マイページ用のログイン認証を簡単に作る方法」を見て 順番に実行していこうと思ったのですが、「/baser/config/baser.php をコピーして・・・」と書いてあるのですが、 ”basercms-3.0.2.zip”を展開した中を全て検索しても”baser.php”が見つかりません。 やはりメジャーバージョンが異なると、フォルダ構成やファイル名などが結構違うという事でしょうか…? 恐れ入りますが、どなたかアドバイス頂けないでしょうか。 よろしくお願い致します。 ■ BaserCMSのバージョン:3.0.2 |
| goichi > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/9 14:51 |
|---|
|
/lib/Baser/Config/setting.php 100行目付近にプレフィックス認証について書いてあります。
ファイルやフォルダ構成は、前バージョンと異なる部分が出てきてしまいますが、プレフィックス認証の仕組みは同じように思います(本当にコアな部分はわかりませんが、使い方は一緒かなと。)。いろいろと他のファイルや似たような名前のもの、フォルダを見ながらやると良いかもしれません。 |
| kenecy > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/9 18:11 |
|---|
|
goichiさん。またまた早速のアドバイスをありがとうございます。
教えて頂いた情報から、過去の「会員制サイトの構築」の情報を読み替えて以下のように実行してみました。 (1)/lib/Baser/Config/setting.php をコピーして、/app/Config/setting.php として保存。 (2)コピーした setting.php の 129行目から137行目の'mypage'部分のコメントを外す。 (3)管理画面からマイページ用ユーザーグループを作成し、「認証プレフィックス」に「マイページ」を選択して保存。 (4)管理画面からマイページ用ユーザーを作成し、マイページ用ユーザーグループを選択して保存。 (5)/mypage/members/login にアクセスすると、 Warning (2): include(/***/lib/Baser/View/users/admin/login.php) [function.include]: failed to open stream: No such file or directory [CORE/Baser/View/Members/mypage/login.php, line 21] Warning (2): include() [function.include]: Failed opening '/***/lib/Baser/View/users/admin/login.php' for inclusion (include_path='.:/usr/local/php/5.2.17/lib/php') [CORE/Baser/View/Members/mypage/login.php, line 21] というエラーメッセージが表示される。 (6)/lib/Baser/View/Membsers/mypage/login.php の21行目を include BASER_VIEWS . 'users' . DS . 'admin' . DS . 'login.php'; から include BASER_VIEWS . 'Users' . DS . 'admin' . DS . 'login.php'; に変更する。 (7)再度/mypage/members/login にアクセスすると、無事マイページログインが表示される。 (8)作成したマイページ用ユーザーでログインすると、/mypage/members/editが表示される。 (9)/mypage/members/logout でログアウトも可能。 途中(5)のエラーで少し引っ掛かりましたが、それ以外はver3になってより簡単(ファイルが用意されている)になっていました。 ちなみに(6)で/lib/配下のファイルは直接変更しましたが、これは別に問題ないでしょうか? というわけで、なんとか無事にユーザーログイン処理を行うことができるようになりました。 ありがとうございました。 ■ BaserCMSのバージョン:3.0.2 |
| iwahei0813 > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/10 10:42 |
|---|
|
無事に解決できたみたいでよかったです!(๑˃̵ᴗ˂̵)و
一点気づいたところですが、 (6)にある、/lib/Baser/View/Membsers/mypage/login.phpのパス書き換えでも問題ないと思います!が、安全な方法として、変更パスをテーマ側に設定、もしくは、app側に設定してあげると次のbaserCMSのバージョン更新による上書きも防ぐことができると思います!! ![]() |
| kenecy > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/11 18:22 |
|---|
|
iwahei0813さん。こんにちは。
やはりそうでしたか。 そのあたりが少し気になっていたのですが、「変更パスをテーマ側に設定、もしくは、app側に設定してあげる」方法が わからなかったので、直接書き換えてしまいました・・・。(^^; その後、マニュアルの中に「ファイル読み込みの優先順位」を見つけまして、 /lib/Baser/View/Membsers/mypage/配下全てを /app/View/Membsers/mypage/ にコピーして /lib/配下を変更前に戻して確認したらうまくいきました。 その後、今度は/app/View/Membsers/mypage/配下を /app/webroot/theme/{テーマ名}/View/Membsers/mypage にムーブして 確認してみると…、あれ?また(5)と同じエラーが発生してしまいました…。 色々と確認してみたものの何故かわからず、ふとLayoutsフォルダが{テーマ名}直下にあることに気づき、 試しに/app/webroot/theme/{テーマ名}/Membsers/mypage にムーブして確認してみたら、うまくいきました。 この結果から、恐らく「ファイル読み込みの優先順位」内の「ビュー関連の読み込み優先順位例」の /app/webroot/theme/{テーマ名}/View/Layouts/default.php は /app/webroot/theme/{テーマ名}/Layouts/default.php の間違いなのではないかと思うのですが、 こうした情報のフィードバックはどうしたらよろしいでしょうか? ■ BaserCMSのバージョン:3.0.2 |
| kenecy > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/11 18:34 |
|---|
|
Antennixさん。こんにちは。
こちらの環境下でも同様のテストをしてみましたら、同じエラーが発生しました。 エラーメッセージの下にStack Trace情報が表示されていましたので、記載しておきます。 引用: Stack Trace どなたか原因のわかる方はおられないでしょうか? よろしくお願い致します。 ■ BaserCMSのバージョン:3.0.2 |
| n1215 > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/17 2:17 |
|---|
|
kenecy 様
Antennix 様 こんばんは。 先ほどから試してみて、原因の検討が付いたのでわかったところまで書いておきます。 結論から述べると、CSRFトークンのバリデーションが原因です。 ●CSRF・CSRFトークン 攻撃用の外部Webページから利用者の意図しないHTTPリクエストを送るCSRF(クロスサイトリクエストフォージェリ)攻撃への対策として、 多くのWebアプリケーションフレームワークでCSRFトークンという乱数値(暗号論的擬似乱数値)を利用する仕組みが実装されています。 サーバでHTMLを生成した際にトークン(乱数値)をformのhiddenパラメータ等として仕込んでおき、 フォームデータの送信時にこのトークンをサーバ側で再び確認することで、不正なリクエストを防ぐというものです。 ●CakePHPの仕様 CakePHPではSecurityComponentがCSRFトークンの生成やバリデーションを司っており、 デフォルトでは一度利用したトークンは再利用しない(= SecurityComponentのcsrfUseOnceプロパティがtrue)というセキュリティポリシーを採用しています。 このため、同じページから同じトークンを利用して2度のAjaxリクエスト(baserCMSの現在の仕様ではログインはAjaxによるものなので)を行うと2度目はエラーとなります。 ページをリロードしてCSRFトークンを更新すれば再び1度目は正常に処理されますね。 ※CSRFトークンの値はHTMLのソースを見ればformのhiddenパラメータ data[_Token][]で確認できます。 ●/admin/users/login のページではエラーが起こらない理由 csrfでソースコードを検索してみたところ、どうやらbaserCMSの管理画面(正確にはログイン画面を含む/admin/以下?) ではCSRFのチェックを行っていないようです。 https://github.com/basercms/basercms/blob/dev-3/lib/Baser/Controller/BcAppController.php の 413行目あたり 従って、この部分を何らかの方法で上書きし、/mypage/以下もCSRFのチェックを行わない、 またはCSRFトークンを使いまわせる仕様にすれば($this->Security->csrfUseOnce = false) 同じように問題を解決できるはずです。 ※ifをコメントアウトしてズボラな確認をしてみたところOKでした。 暫定処置とあるようにあまり褒められた対応ではありませんが、ご確認ください。 なお、コア開発のチケットを見ると、管理画面のログインは近々Ajax方式から通常のPOSTに変更されるようです。 http://project.e-catchup.jp/issues/5512 通常のPOSTであればCSRFトークンの更新もPOSTの都度行われるため、この問題はなくなるはずですね。 Twitter: @n_1215 |
| Antennix > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/17 14:52 |
|---|
|
>n1215様
こんにちは。 頂いた情報を元に対応し、こちらでも改善が確認できました。 タイミングの悪いときに、この問題に取り掛かってしまったようですね・・ 情報を共有頂き、ありがとうございますmm |
| iwahei0813 > Re: baserCMS3で、過去の「会員制サイトの構築」の情報はそのまま使えますか? @ 2014/4/21 13:57 |
|---|
|
kenecyさん!こんにちわ!(*´∀`*)
baserの3系の読み込み順は下記のURLにありますね!! http://basercms.net/manuals/3/programmers/3.html 引用: /app/webroot/theme/{テーマ名}/View/Layouts/default.php は おそらくこの情報はあっていると思います^0^ 例えば、、 /lib/Baser/View/の中を見ていただくと、色々なファイルがあると思いますが、 これらのファイルを変えたい場合は、/app/webroot/theme/{テーマ名}/View/にファイルを作成するようになると思います!^^ ※baserの更新による上書きを防ぐ為です! |



