2015-09-29 4 views
0

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

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

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

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

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

EDIT:

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

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; 
    } 
} 

ответ

2

Первый

Database добавить две колонки

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

После регистрации Suc сесс

  • добавить randome уже в activation_token (md5 или sha1 (до вас))
  • добавить время, если регистрация с использованием текущего времени (теперь())

Link

link должно быть Я категорически не приветствую пользователя в активации URL b потому что он удаляет дублирование ссылок. 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; 
    } 

} 
+0

Сколько времени занимает 3600? – hzq

+0

3600 секунд означает 1 минуту. его в секундах. это зависит от вас, сколько вы хотите. Самая лучшая практика - определить константу для этого. –

+0

для 24 час использование 60 * 60 * 24 –

3

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

+0

Оооо, хорошо, я буду стараться, что первый. – hzq

+0

Humm ... дайте мне знать, если у вас есть проблемы с этим. – Mitul

+0

Хорошо, подождите, но как мне закодировать ссылку, содержащую параметры? Потому что я хочу получить к нему доступ в новой функции, которую я создал для «активации». – hzq

Смежные вопросы