JavaScript: Отправить учетные данные по электронной почте пользователю из localStorage?

1

Мне интересно, может ли пользователь нажать ссылку "забыть пароль", которая отправит им по электронной почте свой пароль, который был установлен в localStorage.

Я знаю, как установить и получить в localStorage, мне просто нужно знать, как отправлять по электронной почте то, что я получаю от пользователя, который ввел свой адрес электронной почты в поле формы.

Ваши мысли очень ценятся. Благодарю!

  • 0
    это слишком рискованно, потому что localStorage недостаточно безопасен для хранения конфиденциальной информации :(
  • 0
    Поверь мне, когда я скажу, что полностью осознаю это. Учетные данные в данном конкретном случае одинаковы для всех пользователей, и единственная причина, по которой мы используем логин, - дать пользователям «ощущение», что они эксклюзивны. Это действительно просто для галочки. Фактически, учетные данные в настоящее время прямо в JavaScript, и все это знают, но они все еще хотят использовать его, а не просто не использовать логин. Я в основном выполняю это упражнение, чтобы получить опыт использования JS. :) О, и спасибо за ваш ответ!
Показать ещё 4 комментария
Теги:
email
local-storage

2 ответа

0

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 и если они соответствуют их таблице базы данных и вытаскивают идентификатор пользователя.

0

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

  • 0
    Большое спасибо за эту информацию. Очень полезно знать правильный способ сделать это.
  • 0
    Нет проблем, вы знакомы с реализацией базы данных?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню