Мне интересно, может ли пользователь нажать ссылку "забыть пароль", которая отправит им по электронной почте свой пароль, который был установлен в localStorage.
Я знаю, как установить и получить в localStorage, мне просто нужно знать, как отправлять по электронной почте то, что я получаю от пользователя, который ввел свой адрес электронной почты в поле формы.
Ваши мысли очень ценятся. Благодарю!
Localstorage очень похож на куки. (но они не совпадают)
Не поймите меня неправильно. Localstorage был феноменальным обновлением для современных браузеров. Теперь разработчики могут легко загружать массивные приложения без необходимости хранить куски в файлах на сервере! Рекомендуется не хранить защищенную информацию, такую как пароль пользователя в localstorage.
Вместо этого создайте случайный ключ хеша MD5, настроенный как ключ авторизации для скрипта. Попросите сценарий в PHP настроить для возврата пароля для учетной записи, связанной с ключом авторизации и именем пользователя. Не забудьте сбросить ключ после авторизации.
База данных:
| ID | Username | Password | Email | Key |
| 1 | John | secret | [email protected] | 0cc175b9c0f1b6a831c399e269772661 |
Для вашего PHP я бы порекомендовал вам взглянуть на PHP :: PDO http://php.net/manual/en/book.pdo.php
PHP: (forget_password.php)
<?PHP
if(isset($_GET['key']) && isset($_GET['username'])){
$connect = new PDO('mysql:host=localhost;dbname=' . /* DB NAME */,/*DB USERNAME*/, /* DB PASSWORD */);
$user = getall($connect, /* TABLE NAME */,
array(
'PASSWORD'
),
array(
'key'=>$_GET['key'],
'username', $_GET['username']
), 1,
array(
'ASC'=>'ID'
);
);
print_r($user); // i will print so you can figure out how to use this for your needs
$connect = null; //close connection
}
function getall($connect, $table, $values, $conditions = null, $limit = null, $ascdesc = null){
$values_str = "";
foreach($values as $key => $value){
$values_str .= $value . ", ";
}
$cond_str = "";
$hascond = false;
if($conditions != null){
$hascond = true;
foreach($conditions as $key => $value){
$cond_str .= $key . "='" . $value . "' AND ";
}
$cond_str = rtrim($cond_str, " AND ");
}
$values_str = rtrim($values_str, ", ");
$cond_str = " WHERE (" . $cond_str . ")";
$orderby = "";
$hasorder = false;
if($ascdesc != null){
$hasorder = true;
foreach($ascdesc as $key => $value){
$orderby = " ORDER BY " . $value . " " . $key;
break;
}
}
$sql = "SELECT " . $values_str . " FROM " . $table . " " . (($hascond)? $cond_str: "") . (($hasorder)? $orderby: "") . (($limit)? " LIMIT " . $limit: "");
//echo $sql;
$sql_prep = $connect->prepare($sql);
$sql_prep->execute();
return $result = $sql_prep->fetchAll(PDO::FETCH_ASSOC);
}
?>
Когда пользователь нажимает забытый пароль, введите им свое имя пользователя и отправьте ссылку по электронной почте в файл с соответствующим пользователем:
http://www.example.com/forgot_password.php?username=John&key=0cc175b9c0f1b6a831c399e269772661
Боковое примечание. Очень небезопасно хранить пароли без хеширования (многие называют это шифрование, но хеширование и шифрование совершенно разные). Я предлагаю вам хранить ваши пароли с помощью пароля_шиба, прочитайте больше: http://php.net/manual/en/function. пароль hash.php
Я советую пользователю изменить свой пароль после авторизации в скрипте forget_password.php.
Ваш вопрос спросил, как отправить электронное письмо. Чтобы отправлять электронные письма с вашего сервера, вы должны убедиться, что ваши настройки apache настроены правильно. Вот сообщение в stackoverflow, которое адресовано этому локально: отправьте почту с локального сервера apache
После правильной настройки конфигурации вы можете запустить эту функцию php:
function send_email($subject, $msg, $to, $from){
$from - strip_tags($from);
$to = strip_tags($to);
$message = $msg;
$headers = "From: " . $from . "\r\n";
$headers .= "Reply-To: ". $from . "\r\n";
$headers .= "X-Confirm-Reading-To:" . $from . "\r\n";
$headers .= "Mailed-By:" . $from . "\r\n";
$headers .= "Disposition-Notification-To:" . $from . "\r\n";
$headers .= "Return-Receipt-To:" . $from . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if(mail( $to, $subject, $message, $headers ))
return true;
return false
}
Я также хочу добавить, что если вы надеетесь сохранить информацию для входа в систему, это делается на сервере, а не на стороне клиента. Приложите свою форму с помощью флажка "Запомнить меня". Попросите свой PHP проверить, отмечено ли текстовое поле, если оно хранит идентификатор пользователя в таблице базы данных для запоминающихся пользователей. Вы также должны сделать PHP хранилищем не менее 5 случайных уникальных хэшей в файлы cookie, чтобы сервер был ключом для доступа к сохраненной информации. Попросите наш веб-сайт проверить, существуют ли файлы cookie и если они соответствуют их таблице базы данных и вытаскивают идентификатор пользователя.
Вы никогда не должны отправлять пароли, даже по электронной почте, которую пользователь имеет в файле. Он всегда должен быть перенаправлен переадресацией пароля, который вы отправляете. Кроме того, localStorage не является подходящим местом для информации такого рода. Вы захотите реализовать базу данных для достижения необходимой защиты информации.