2015-08-16

baserCMSで会員サイトを作る

baserCMSで会員サイトを作っていたのですが、はまったところを忘れないように書いて置きます。
環境: baserCMS 3.0.7
やろうとしたこと: 会員用のログイン機能の追加
参考にしたサイト: てるてる坊主様ブログ 2013年4月20日土曜日 baserCMSで会員制のページを作る

はまった事:
  1. 「認証プレフィックス設定」の設定でエラーが出て進めない。
  2. 見つけてきた参考サイトはbaserCMSの3系では2系のもので、3系のものに修正する必要があった。
  3. phpのheaderファンクションが安定しない。
  4. 会員IDと管理者IDの登録メールを同じにしたため?にトラブル。

修正方法:
(1) てるてる坊主様のブログに書いてあるように準備し、新規のユーザーグループを作ろうとしてもbaserCMSの設定で「認証プレフィックス設定」でエラーが発生します。結局、「管理システム」ですでに作成してあったものをコピーして、その名前などの設定と認証プレフィックス設定の選択を変更すると新しいグループを作成することができました。
 
(2) 次の様な感じで修正してエラーが出なくなりました。

---オリジナル---
$url = $html->url();
$pattern = '/member_blog/';
if (preg_match($pattern, $url)) {
    if (!isset($this->viewVars['user'])) {
        header('Location: '.$bcBaser->
          getUrl(Configure::read('BcAuthPrefix.mypage.loginAction')));
    }
}

---3系に対応するよう修正---
$url = $this->BcBaser->>getUri('');
$pattern = '/member_blog/';
if (preg_match($pattern, $url)) {
    if (!isset($this->viewVars['user'])) {
        header('Location: '.$this->bcBaser->
          getUrl(Configure::read('BcAuthPrefix.mypage.loginAction')));
        exit();
    }
}
 
デバッグ中、headerの前にecho文など追加して確認していたのですが、調べて見ると、それはしてはいけないようですね。基本の基本のようです。

(3) サーバーキャッシュのクリア直後はうまく行くのですが、二回目以降はheaderが機能しません。結局、(2)のソースには入っていますが exit 文を追加して安定して動作するようになりました。どうやら、これも基本のことのようです。

(4) 多分の話しなのですが、もしかしたら参考になるかもしれないので書いておきます。
両者の登録メールアドレスを同じにしてしまっている状態で、会員IDのパスワードリセットをテストの目的で試しました。メールで送るように指示するものです。

 すぐにメールは飛んできたのですが、送られてきたパスワードではログインできませんでした。しかも、管理者の方のパスワードまで変わってしまったらく、それまで使っていたパスワードでも、送られてきたパスワードでも管理者でログインできなくなりました。これは慌てました。

 phpMyAdminから暗号化されたパスワードを修正する方法を試してみても駄目です。
最終的には、たぶん、メールアドレスを設定しおなして、再度、パスワードリセットを試して、うまくいったのだと思います。(確証はありません)