root/events/phpframework/codeigniter/trunk/system/application/controllers/signup.php @ 19194

Revision 19194, 3.6 kB (checked in by kenji, 6 years ago)

Add CSRF checking and Fix missing validation class loading

Line 
1<?php
2               
3class Signup extends Controller
4{
5    function Signup()
6    {
7        parent::Controller();
8        $this->load->helper(array('form', 'url'));
9        $this->output->enable_profiler(TRUE);
10    }
11
12    function index()
13    {
14        $this->load->library('validation');
15        $this->validation->set_error_delimiters('<font color="red">', '</font>');
16
17        // Required Field Rules.
18        $rules['username']        = "trim|required|min_length[3]|max_length[100]";
19        $rules['password']        = "trim|required|alpha_numeric|min_length[6]|max_length[64]|matches[password2]";
20        $rules['password2']     = "trim|required|alpha_numeric|min_length[6]|max_length[64]";
21        $rules['email']         = "trim|required|valid_email|max_length[255]";
22        //$rules['question']         = "required|max_lenght[80]";
23        //$rules['answer']         = "required|max_lenght[40]";
24
25        $this->validation->set_rules($rules);
26       
27        // Required Field Names
28        $fields['username']     = "ユーザ名";
29        $fields['password']     = "パスワード";
30        $fields['password2']     = "パスワード(確認)";
31        $fields['email']         = "メールアドレス";
32        //$fields['question']        = "秘密の質問";
33        //$fields['answer']        = "秘密の質問の答え";
34       
35        $this->validation->set_fields($fields);
36           
37        if ($this->validation->run())
38        {
39            // CSRF チェック
40            $ticket = $this->session->userdata('ticket');
41            if ( ! $this->input->post('ticket')
42                || $this->input->post('ticket') !== $ticket)
43            {
44                header('Content-Type: text/html; charset=UTF-8');
45                echo 'クッキーを有効にしてください。クッキーが有効な場合は、不正な操作がおこなわれました。';
46                exit;
47            }
48
49            // Validation Passed
50            $redux = $this->redux_auth->register
51                        (
52                            $this->validation->username,
53                            $this->validation->password,
54                            $this->validation->email,
55                            '',
56                            ''
57                        );
58
59            // The reason we put the method into a variable is so we can deal
60            // with the different return messages.
61           
62            // I use a switch statement to deal with the different return
63            // messages produced by the registration method.
64
65            switch ($redux) {
66                case 'REGISTRATION_SUCCESS':
67                    # code...
68                    break;
69                case 'REGISTRATION_SUCCESS_EMAIL':
70                        $data->title  = 'Phwittr / Create an Account';
71                        $data->header = $this->load->view('signup/header', '', TRUE);
72                        $data->main   = $this->load->view('signup/main_register_ok', '', TRUE);
73                        $data->sub    = $this->load->view('signup/side', '', TRUE);
74                        $this->load->view('layout', $data);
75                    break;
76                case false:
77                    # code...
78                    break;
79                case true:
80                    # code...
81                    break;
82            }
83        }
84        else
85        {
86            // CSRF 対策のワンタイムチケット
87            $data->ticket = md5(uniqid(mt_rand(), TRUE));
88            $this->session->set_userdata('ticket', $data->ticket);
89
90            $data->title  = 'Phwittr / Create an Account';
91            $data->header = $this->load->view('signup/header', '', TRUE);
92            $data->main   = $this->load->view('signup/main', $data, TRUE);
93            $data->sub    = $this->load->view('signup/side', '', TRUE);
94            $this->load->view('layout', $data);
95        }
96    }
97
98    function activate($code = '')
99    {
100        if ($this->redux_auth->activate($code))
101        {
102            $data->title  = 'Phwittr / Create an Account';
103            $data->header = $this->load->view('signup/header', '', TRUE);
104            $data->main   = $this->load->view('signup/main_activate_ok', '', TRUE);
105            $data->sub    = $this->load->view('signup/side', '', TRUE);
106            $this->load->view('layout', $data);
107        }
108        else
109        {
110            $data->title  = 'Phwittr / Create an Account';
111            $data->header = $this->load->view('signup/header', '', TRUE);
112            $data->main   = $this->load->view('signup/main_activate_ng', '', TRUE);
113            $data->sub    = $this->load->view('signup/side', '', TRUE);
114            $this->load->view('layout', $data);
115        }
116    }
117
118}
Note: See TracBrowser for help on using the browser.