質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.83%

cakephp signup→activate→login→の順でredirectしたいです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 302

amaturePy

score 101

題目の通りcakephp signup→activate→login→の順でredirectしたいです。しかし、画面はlogin画面から始まってしまいます。調べるとredirect関数を使うと機能の表示順を指定できるみたいなのですが、その正しい使用方法が分かりません。一応URLも使用してコード内に組み込んではいるのですが、うまく作動していない状態です。
だい
また「 $active = $this->User->field('active', array('username' => $this->data['User']['username']));」に対してUndefined index: User というエラーが出てしまっています。これは他にどのファイル内でUserを定義してあげれば良いのでしょうか??
cakephpにお詳しい方皆ご教授頂けないでしょうか?

<?php
   App::uses('CakeEmail', 'Network/Email');

   class UsersController extends AppController {

        public function signup() {
        if ($this->request->is('post')) {
            if ($this->User->save($this->data)) {

                $url = 'activate/' . $this->User->id . '/' . $this->User->getActivationHash();
                $url = Router::url($url, true);

                //sending Email
                $email = new CakeEmail();
                $email->from(array('sender@domain.com' => 'Sender'));
                $email->to($this->data['Users']['email']);
                $email->subject('User activiation');
                $email->send($url); // メール本文に本登録用リンクを記す

                $this->Session->setFlash('sent for activiation');
            } else {
                $this->Session->setFlash('error');
            }
        }


    }

        public function activate($user_id = null, $in_hash = null) {
            $this->User->id = $user_id;
            if ($this->User->exists() && $in_hash == $this->User->getActivationHash()) {
                $this->User->saveField('active', 1);
                $this->Session->setFlash('Your user account could be activated');
            } else {
                $this->Session->setFlash('Invalid link');
            }
        }

            // ログイン
            public function login() {
                if ($this->request->is('post')) {
                    if ($this->Auth->login()) {
                        $this->User->id = $this->Auth->user('id');
                        $this->User->saveField('logins', $this->Auth->user('logins') + 1);  //通算ログイン回数
                        $this->User->saveField('lastlogin', date('Y-m-d H:i:s'));           //最終ログイン日時
                        return $this->redirect($this->Auth->redirect());
                    } else {
                        $active = $this->User->field('active', array('username' => $this->data['User']['username']));
                        if ($active === 0) {
                            $this->Session->setFlash('Plesdr activate your account');
                        } else {
                            $this->Session->setFlash('Your username or password is wrong');
                        }
                    }
                }
            }

            public function logout() {
                $this->Session->setFlash('Loggedout');
                return $this->redirect($this->Auth->logout());
            }

            public function dashboard() {

            }



            public function beforeFilter() {
                parent::beforeFilter();
                $this->Auth->allow(array('signup', 'activate', 'login'));
            }

            public function password() {
                $id = $this->Auth->user('id');

                $this->User->id = $id;
                if (!$this->User->exists()) {
                    throw new NotFoundException('Invalid user');
                }
                if ($this->request->is('post') || $this->request->is('put')) {
                    debug($this->request->data);
                    if ($this->User->save($this->request->data)) {
                        $this->Session->setFlash('your passworf is updated');
                        $this->redirect(array('action' => 'dashboard'));
                    } else {
                        $this->Session->setFlash('Your password could not be updated');
                    }
                }
                $this->request->data = $this->User->read(null, $id);
            }     

        }   

        ?>
コード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

Routes.phpに以下のように設定。

Router::connect('/', array('controller' => 'Pages', 'action' => 'home'));
    Router::connect('/signup', array('controller' => 'Users', 'action' => 'signup'));
    Router::connect('/login', array('controller' => 'Users', 'action' => 'login'));
    Router::connect('/profile', array('controller' => 'Users', 'action' => 'profile'));
    Router::connect('/search', array('controller' => 'Follows', 'action' => 'search'));
    Router::connect('/logout', array('controller' => 'Users', 'action' => 'logout'));
コード

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る