Проблема с подтверждением активации электронной почты при регистрации. В URL-адресе электронной почты отсутствует строка кода активации, даже если она соединена - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть этот метод:

public function activation_code() 
{ //activation code sent into db
  $activation_code = random_string('alnum', 32);
  return $activation_code;
}  

Я пытаюсь предоставить этому данные почты, которые отправляются в мою базу данных, но также предоставить копию того же кода активации, чтобы я могобъедините его с URL-адресом «нажмите здесь, чтобы подтвердить адрес электронной почты», который указан в электронном письме с подтверждением, которое отправляется пользователям при регистрации.

Как я могу это сделать?Я не могу предоставить метод, потому что если я сделаю код базы данных, и код URL электронной почты будет отличаться, поэтому пользователь не сможет сопоставить их и подтвердить свой адрес электронной почты.

Я пробовал много другихтакие способы, как предоставление метода в одном месте, например

public function create() 
{ //get post data and insert into db

  $dbcolumn->group_id = 2; //group 1 for admin group 2 for member
  $dbcolumn->first_name = $this->input->post('first_name');
  $dbcolumn->last_name = $this->input->post('last_name');
  $dbcolumn->email = $this->input->post('email');
  $dbcolumn->password = $this->hashed();
  $dbcolumn->birthday = $this->input->post('year') . 
    '-' . $this->input->post('month') . '-' . $this->input->post('day');
  $dbcolumn->sex = $this->input->post('sex');       
  $dbcolumn->activation_code = $this->activation_code();
  // date and time user joined the website
  $dbcolumn->created_on = date('Y-m-d H:i:s', now()); 
  $this->db->insert('users', $dbcolumn);
}

Если вы посмотрите на строку кода активации dbcolumn->, вы увидите, что я сделал.Это работает, и код хранится в базе данных.Если я предоставлю тот же метод "$ this-> activ_code () для отправленного электронного письма, очевидно, что коды будут другими.

public function send_confirmation_email() 
{ //receives variable from create method
  $this->load->library('email');
  $this->email->from('wengerarsen@gmail.com', 'my site');
  $this->email->to($this->input->post('email'));
  $this->email->subject('my site - Activate your account');
  //copy of activation code returned from create method
  $this->email->message('We\'re back, please click the link to activate your account ' . anchor('http://mysite.com/activation/' . $this->activation_code(), 'Activate my account'));
  $this->email->send();
}

Как видите, у меня есть тот же метод, который $ $мой метод подтверждения отправки по электронной почте. Это просто сгенерирует совершенно новый код, означающий, что я не смогу сопоставить код активации базы данных и код сегмента URI в электронном письме пользователя.

Я попытался создать переменнуюв ответной команде public и вызовите его с помощью метода электронной почты с подтверждением отправки, но он не работает. Код заканчивается отсутствием в конце URL-адреса в электронном письме.

Я пробовал так много разных способов иничего не работает.

Может быть, я что-то здесь упускаю?

Советы, примеры и т. д. будут высоко ценится.

1 Ответ

0 голосов
/ 30 декабря 2010

Каждый раз, когда вы звоните activation_code(), вы будете создавать новый код, потому что вы храните его только в области действия этой функции.

Лучше было бы сохранитьэто как свойство объекта, например:

public var $_activation_code = null;

public function activation_code() {
    if (is_null($this->_activation_code)) {
        $this->_activation_code = random_string('alnum', 32);
    }
    return $this->_activation_code;
}

Это создаст код, если это еще не было сделано для этого объекта, или просто вернет текущий код, если метод был вызван moreчем один раз, что означает, что код будет согласован по всему объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...