Мне интересно, возможно ли, чтобы пользователь щелкнул ссылку «забыл пароль», которая отправит ему по электронной почте свой пароль, который был установлен в 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: (Forgot_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
Примечание
Хранить пароли без хеширования крайне небезопасно (многие называют это шифрованием, но хэширование и шифрование совершенно разные). Я предлагаю вам хранить свои пароли с использованием password_hash, подробнее на: http://php.net/manual/en/function.password-hash.php
Я советую сделать так, чтобы пользователь изменил свой пароль после авторизации в скрипте Forgot_password.php.
Ваш вопрос спросил, как отправить электронное письмо.
Чтобы отправлять электронные письма с вашего сервера, вам необходимо убедиться, что ваши настройки apache настроены правильно. Вот сообщение о стеке потока, которое решает эту проблему локально: отправлять почту с локального сервера 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. & если они совпадают с вашей таблицей базы данных & потяните идентификатор пользователя.