2014-09-21 4 views
0

Я новичок в php и cakephp, я выполнял учебное пособие по простой аутентификации и авторизации от cakephp (http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html). Кажется, все работает хорошо.Подтверждение электронной почты Cakephp и пользователя

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

, но я не могу показаться, чтобы иметь возможность сравнить фишку ссылку с паролем в базе данных ...

$passwordHasher = new BlowfishPasswordHasher(); 
      $motdepasse = $this->data['Utilisateur']['mot_passe'] = $passwordHasher->hash(
       $this->data['Utilisateur']['mot_passe'] 
      ); 
      $link = array('controller'=>'utilisateurs','action'=>'activate',$this->Utilisateur->id 
        .'-'. $motdepasse); 


public function activate($token) { 
    $token = explode('-',$token); 
    $user = $this->Utilisateur->find('first',array(
    'conditions' => array('id' => $token[0],'Utilisateur.mot_passe' => Security::hash($token[1], 'blowfish', 'Utilisateur.mot_passe')) 
)); 
    debug($user); 
    debug($token[1]); 
    die(); 

} 

Можете ли вы мне помочь? Спасибо, парни!

+0

Если вы делаете это вручную, можете ли вы проверить, что такое хешированная версия каждого, и посмотреть, действительно ли они разные? – Dave

ответ

1

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

Если вы говорите, что в вашем методе activate() вы снова хешируете хеш-код, который в случае генерации хеша приведет к сбою сравнения. Однако сценарий не будет genereate хэша, как вы используете недопустимое значение соли, которое должно привести к следующему предупреждению:

Invalid соль: Utilisateur.mot_passe для Blowfish Пожалуйста, посетите http://www.php.net/crypt и прочитать соответствующий раздел для строительства соковыжималки.

и Security::hash() вернет пустую строку. Если вы не получите такое сообщение, вам понадобится enable the debug mode.

Я предлагаю познакомиться с PHP, CakePHP, хэшированием и прочей информацией, прежде чем пытаться реализовать связанные с безопасностью функции!

Возможно, вы захотите проверить , он поддерживает проверку электронной почты и многое другое из коробки.

+0

@PatriceB может также хотеть прочитать [как использовать токены и т. Д. В CakePHP] (http://www.dereuromark.de/2010/06/25/tools-plugin-part1-codekey/) вместо этого как легкий подход , – mark

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