ログイン後にちゃんとクリックしたURLに戻るようにする(CakePHP修行 #25)

SPONSORED LINK

Pocket

さてログイン処理に戻りましょう。

今回やりたいのは「ログイン後にちゃんとクリックした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をクリックすると次のようになります。

login_back_1.gif

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

login_back_2.gif

↑ ちゃんとホーム画面じゃなくて、設定変更画面へ飛びました。

こんなところですかね。ちゃんと動くようになってきましたね。さてあとは面倒そうな「情報を保存する」機能を実装しますかね・・・。

※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。

ツイッターもやっています!

SPONSORED LINK

    • tadokoro
    • January 7th, 2009

    この方法を求めてここにたどり着きました。参考にさせていただきました。

  1. No trackbacks yet.