Активация аккаунта, CodeIgniter

Я хочу создать активацию учетной записи, в которой после регистрации будет отправлена ​​ссылка на электронное (или одно) электронное письмо администратора, в результате чего администратору просто нужно щелкнуть эту ссылку, чтобы активировать эту учетную запись.

У меня регистрация и логин работают. Я использую MySQL Workbench и имею «флаг» или, вернее, просто поле в моей таблице счетов user_login), чтобы узнать, включена ли учетная запись или нет, что по умолчанию отключено после регистрации.

Я застрял и отправляю ссылку по электронной почте, я не уверен, с чего начать. Эта ссылка, которую я хочу отправить, будет содержать случайную строку и будет отправлена ​​администратору, скажем abc/123/random?stringis=1234, Тогда администратору нужно будет просто открыть свою электронную почту и щелкнуть строку, а затем активируется учетная запись этого конкретного пользователя. я нашел этот а также этот но это только для того, чтобы отправить ссылку по электронной почте.

У меня нет идеи по логике. Должен ли я создать функцию, посредством которой ссылка будет идти непосредственно к функции, и оттуда она изменит значение в моей таблице на enabled или как я его называю, чтобы учетная запись пользователя считалась активированной? Нужно ли создавать новое поле для совпадения со случайно сгенерированной строкой?

Основная идея заключается в том, что я пытаюсь сделать то же самое, что и те типичные сайты, на которых пользователю будет отправлена ​​ссылка для активации учетной записи после того, как он / она щелкнет ее в электронном письме, но на этот раз только на конкретное электронное письмо, которое принадлежит администратору.

РЕДАКТИРОВАТЬ:

В контроллере

public function activate_user($activation_code)
{
$result = $this->home_model->activate($activation_code);

if($result != FALSE)
{
echo "You have activated :".$result[0]->user_id.".";
}
else
{
echo "Activation failed, something went wrong.";
}
}

В модели:

public function activate($activation_link)
{
$this->db->select('*');
$this->db->from('user_login');
$this->db->where('activation_link', $activation_link);
$query = $this->db->get();

if($query->num_rows() == 1)
{
return $query->result();
}
else
{
return FALSE;
}
}

0

Решение

Первый

База данных
добавить два столбца

  • activation_token {VARCHAR | 255}
  • activation_time {DateTime}

После успешной регистрации

  • добавить случайные хэды в активационный токен (md5 или sha1 (до вас))
  • добавить время, если регистрация с использованием текущей отметки времени (сейчас ())

Ссылка на сайт

ссылка должна быть
Я настоятельно предпочитаю userid в URL активации
потому что это удалить дублирование ссылки.
http://sitename.com/activation/{User_id} / {хэш}

в контроллере

public function activation($user_id,$hash)
{

$timeOfexpiration = 3600;

$data = $this->model->get_data($id,$hash);

if(!$data)
{
return false
}

//if user found
//check expiration of linke
//like

if($data['activation_time']+$timeOfexpiration < now())
{
return true;
}
else
{
return false;
}

}
2

Другие решения

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

3