ログイン後にちゃんとクリックしたURLに戻るようにする(CakePHP修行 #25)
July 15, 2007 10:52 PM written by Gen Taguchi
さてログイン処理に戻りましょう。
今回やりたいのは「ログイン後にちゃんとクリックしたURLに戻るようにする」です。現在のロジックではログイン後は必ず/users/home/にとぶようになっています。
しかし/users/editをブックマークやメモしておいて、そこに直接飛びたい場合もあるでしょう。そこでログイン前にクリックしたURLを保存し、ログイン後にちゃんとリダイレクトするようにします。
■ login_backurlをSessionに書き込み
ログインしているかどうかのセッションをチェックする際に$login_back_urlをセットしておきます。
class AppController extends Controller
{
function checkSession()
{
// If the session info hasn't been set...
if (!$this->Session->check('my_id'))
{
// save login back url
$this->Session->write('login_back_url',((getenv('SERVER_PORT')==443)?'https://':'http://').getenv('HTTP_HOST').getenv('REQUEST_URI'));
// Force the user to login
$this->redirect('/users/login');
exit();
}
}
}
■ リダイレクト処理を変更
次にusers_controller.phpを次のように変更。セッションから読み取ってリダイレクト先を変えています。セッションから読み取れなかったらとりあえずホーム画面を表示。
function login()
{
$this->pageTitle = 'Welcome to CODE*CODE!';
// sys_msg
$this->set('sys_msg', $this->Session->read('sys_msg'));
$this->Session->delete('sys_msg');
// login back url
$login_back_url = $this->Session->read('login_back_url');
// form start
$this->set('error', false);
if (!empty($this->data))
{
$someone = $this->User->findByEmail($this->data['User']['email']);
if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == sha1(PWD_KEY.$this->data['User']['pwd']))
{
$this->Session->write('my_id', $someone['User']['id']);
if (isset($login_back_url))
{
$this->redirect($login_back_url);
$this->Session->delete('login_back_url');
} else {
$this->redirect('/users/home/');
}
}
else
{
$this->set('error', true);
}
}
}
これでOKですかね。たとえば、ログインしていない状態でhttp://www.codexcode.com/users/editをクリックすると次のようになります。

↑ ログインしていないのでログイン画面へ。ここでログインすると・・・。

↑ ちゃんとホーム画面じゃなくて、設定変更画面へ飛びました。
こんなところですかね。ちゃんと動くようになってきましたね。さてあとは面倒そうな「情報を保存する」機能を実装しますかね・・・。
※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Info: CakePHP修行! |
固定リンク |
コメント (0) |
トラックバック (0) |
↑


