- 2007-07-15 (Sun) 22:52
- CakePHP関連
さてログイン処理に戻りましょう。
今回やりたいのは「ログイン後にちゃんとクリックした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で作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Comments:1
- tadokoro 09-01-07 (Wed) 11:03
-
この方法を求めてここにたどり着きました。参考にさせていただきました。
Trackbacks:0
- Trackback URL for this entry
- http://www.ideaxidea.com/archives/2007/07/urlcakephp_25.html/trackback
- Listed below are links to weblogs that reference
- ログイン後にちゃんとクリックしたURLに戻るようにする(CakePHP修行 #25) from IDEA*IDEA ~ 百式管理人のライフハックブログ


























