ログイン済みの場合だけフロント画面を表示するといった作りは可能でしょうか?

masaki > ログイン済みの場合だけフロント画面を表示するといった作りは可能でしょうか? @ 2012/10/4 17:46
はじめまして。masakiと申します。

BaserCMSを独自サーバに入れて、simplecorpのテーマを利用させてもらって、ちょこちょこカスタマイズをしています。

現在、プレフィックス認証機能を利用して、マイページのログイン画面を表示できるように設定しています。

そこで質問なんですが、ログイン済みの場合だけフロント画面を表示するといった作りは可能でしょうか?

現状未ログインでも、テーマで作成したフロントは見えてしまいますが、これを管理用でログインするか、プレフィックス認証機能でログインしたユーザのみフロントが見れるようにしたいと考えてます。

要するにログインを強制させたいサイトを作りたいのですが、ちょっとどうしたら良いのかわからなくて...

認証後リダイレクト先を独自に作れば可能かとは考えてますが、それだと全てフルで作りこみが要るのかな?と思ってまして、できればテーマを適用して作ったサイトをそのまま使いたいと思ってます。

過去ログを見てましたが、いまいちこの辺の作りがわからなく、初めて質問させて頂きました。

■ BaserCMSのバージョン:2.0.5.1
■ スマートURLの利用:ON
■ 設置フォルダ:ドキュメントルート/サブフォルダ
■ 利用しているデータベース:MySQL
■ PHPスキル(自己評価):D
■ OSの種類:CentOS6.3
■ PHPのバージョン:5.3.3
■ データベース種類・バージョン:MySQL 5.1.61
goichi > Re: ログイン済みの場合だけフロント画面を表示するといった作りは可能でしょうか? @ 2012/10/6 12:09
こんにちは(^^
私の環境でいろいろ試してみたので、実験結果として書き込んでみます。
アイディア程度にお考えいただければとおもいます。
(もっと良い方法がありそうな予感がします)

まず、プレフィックス認証を使用するということなので、
/baser/config/baser.php

/app/config/baser.php
にコピーします。
(ここまではお約束ですよね!)

で、コピーしたbaser.phpを開くと106行目付近に以下のような部分があると思います。
// フロント(例)
		'front' => array(
			'name'			=> 'フロント',
			'loginRedirect'	=> '/',
			'userModel'		=> 'User',
			'loginAction'	=> '/users/login',
			'toolbar'		=> true
		),

この部分がコメントアウトされているはずですので、
コメントアウトを外してください。

baserCMSの管理画面からユーザーグループ管理で新規グループを作成します。
このとき、認証プレフィックス設定に「フロント」を選んでください。

つぎにこのグループに属するユーザーを登録しておきます。
新規ユーザー登録で登録しますが、この時に「グループ」は「フロント」を選択してください。

これでプレフィックス認証とユーザーが出来ました。

で、ここからが問題なのですが
このままだと、ログインしていなくてもフロント画面が表示されちゃうんですよね・・・。
(私のイメージでは「フロント」で認証を作ったら、
フロント画面全体にAuth認証がかかるイメージだったのですが、どうやら違うようで・・・。
私の環境だけかもしれませんが・・・。)

とりあえず、この状態から意図する仕組みを作る一番簡単で単純な方法は
使用しているテーマのレイアウトファイルで、ログイン状態を判定してやる方法だと思います。

/app/webroot/themed/テーマ名/layouts/default.php
を開いていただいて、その一番最初に以下の処理を入れます。
<?php
//ログイン情報からプレフィックスを取得する
$userPrefix = $session->read('Auth.User.authPrefix');
//frontまたはadminでなければリダイレクトする
if($userPrefix != 'admin' && $userPrefix != 'front'){
	//ログインページにリダイレクト
	header("Location: http://ドメインとか/users/login");
	exit;
}
?>


冒頭でbaser.phpを変更しましたが、「フロント」を使用すると
http://baserCMSのインストール先/users/login
にログイン画面が自動で設定されます。
(もしスマートURLをOFFにしたなら
http://baserCMSのインストール先/index.php/users/login
になります)

とりあえず、これで
このレイアウトファイル(default.php)を使用するページは、全て認証が必要な仕組みになると思います。
もし他のレイアウトファイルを使うページがある場合は、そちらにも前述の処理をいれてください(^^

いかがでしょうか。
出来なかったらごめんなさい。m(__)m
まぁ、参考程度にお考えいただければと思います。



masaki > Re: ログイン済みの場合だけフロント画面を表示するといった作りは可能でしょうか? @ 2012/10/9 9:55
goichi様

ご返信戴きまして誠にありがとうございます。
また、お返事が遅くなって申し訳ありません。

ご返信戴いた通り変更して、無事に解決できました。

書き込みしてからbaser.phpのフロントを、コメントアウトして、
ユーザグループにフロントが出てくるところまでは、自力で気づいたのですが、
「これ効かないよなぁ・・・」なんて困ってました。

完璧でございます!

判定とリダイレクトを入れないとダメなんだろうなぁと思ってましたが、
どこに入れるのがベストなのかが、これまた悩んでて、
default.phpの先頭にとご指摘頂いて、「おおお!」と感動させて頂きました。

本当にありがとうございます。非常に助かりましたm(__)m
ログイン
ユーザー名:
パスワード:


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

検索

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

フォーラムガイド


関連リンク

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

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