RSS

ユーザ登録と画面遷移

12 12月

やっていること
・AuthComponentを使用して、認証をかけている。
・usersで登録すると、登録画面の種別で続いてAテーブルに付加情報を登録するか、Bテーブルに情報を登録するか、判断して遷移する。

user登録→A登録画面 またはuser登録→Bテーブル登録画面という遷移を行う際に、userで登録したIDを、Aテーブル、またはBテーブルに引継ぎ、Aのuser_id,Bのuser_idに格納したい(アソシエーション張りたいので)。この場合、
users/addで、userの登録を行った後、AもしくはB画面にリダイレクトしている。つまり、ここで作成したuserのidをどう持つべきか、ということで1.セッション 2.hiddenあたりが候補だったんだけど・・・。
ログインさせちまえよって思いがふと。
つまり
user/add呼ばれる→usersテーブルに登録する→明示的にAuth->login()を呼ぶ。これで$this->Auth->user(‘id’)でデータが取ってこれる。

  function add() {
    if (!empty($this->data)) {
        $this->User->create();
        //ユーザを作成する際にデータがあったらエラー。
        //本来、Userモデルでデータベースにハッシュ化していれるのはpasswordなのでここで暗号化して格納する。
        $this->data['User']['password'] = $this->Auth->password($this->data['User']['pass']);
        $this->User->save($this->data['User']);
        //作成したユーザIDを保持
        $user_id = $this->User->getLastInsertID();
        //登録ユーザーでその後の登録ページを遷移する
        if($user_id != null){
        	//ログインさせる。そしたらセッションにいれなくてよいし。IDが保持できる。
        	$this->Auth->login($this->data['User']);
        	//ユーザ登録ができたときだけ、ぺーじに遷移させる
	        if($this->data['User']['kind']==1){
	        	$this->redirect('/companies/add');
	        }elseif($this->data['User']['kind']==0){
	        	$this->redirect('/members/add/');
	        }else{
	        	//エラーページへ
	        }
        }
    }
  }

これでログインができたので、この画面からリダイレクトさせたら無事ヘッダに「○○さん」の表示ができた。
さて次の問題。
この後、companies、もしくはmembersに遷移させて登録させるわけだけど、もしここで処理をユーザがやめた場合、次回ログイン後に登録がないデータについては再度companies、もしくはmembersの登録画面にいかせたい。別のページにアクセスしようとしても、それはブロックしたい。つまり、ページ遷移のたびに、そのユーザがきちんとcompany、もしくはmemberの登録がなされているユーザなのかを判断したい!user/loginに書いてもいいのだけど、それだとそれ以降にページを遷移した場合(たとえばURL時下打ちとかされた)にもcompany、もしくはmemberのデータがあるかどうかを判断する場合はuser/loginだけではだめ。そうなると共通の箇所で集約させたいので、app/app_controllerに書く必要があるのだろうか…。

問題はapp/app_controllerの「どこ」に書くか、ってことで、現在beforeFilter()に簡易ACL的なチェックをしているのだけど、そこに組み入れるべきか・・。app/app_controllerの中でcompany、companyモデルを扱えるのだろうか。ってことであれ?beforeFilter()ってログイン認証の前によばれんじゃなかったっけ??って頭がこんがらがってきたところで終了。

ページ遷移ごとにAuthチェックが走るのはわかるんだけど、実際どこでやってるのか?っていうのがいまいちわかりにくい・・・。
app/app_contoroller.phpでログイン認証以外の処理、それもモデルを使用しての処理がしたいってことでした。
明日またしらべてみよーっと。ねむい…。12月は勉強会いけなかったなー。とほほ。

広告
 
コメントする

投稿者: : 12月 12, 2009 投稿先 cakephp

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。