从localStorage向用户发送登录凭据

JavaScript: Email login credentials to user from localStorage?

本文关键字:登录 localStorage 用户      更新时间:2023-09-26

我想知道是否有可能让用户点击一个'忘记密码'链接,将通过电子邮件发送他们的密码已在localStorage中设置。

我知道如何设置和获取localStorage,我只需要知道如何发送电子邮件给我得到的用户,谁已经将他的电子邮件输入到一个表单字段。

非常感谢您的关心。谢谢!

你永远不应该发送密码,即使是用户存档的电子邮件。它应该始终是您发送的重置密码链接重定向。此外,localStorage不是存放这类信息的合适位置。您将需要实现一个数据库来实现您正在寻找的信息保护。

Localstorage的工作方式很像cookie。(但它们并不相同)

不要误解我的意思,localstorage是现代浏览器的一个显著更新。现在,开发人员可以轻松地加载大量应用程序,而不必在服务器上的文件中存储块!建议不要将用户密码等安全信息存储在localstorage中。

生成一个随机MD5散列密钥,设置为脚本的授权密钥。在PHP中设置一个脚本来返回与授权密钥&amp相关联的帐户的密码;用户名。请记住在授权后重置密钥。

数据库:

|   ID    |  Username |  Password  |         Email           |                 Key                  |
|    1    |    John   |   secret   |      john@gmail.com     |    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设置配置正确。这里有一个关于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检查文本框是否被选中,如果被选中,则将用户ID存储在数据库表中,以便记住用户。您还应该让PHP将至少5个随机唯一哈希存储到一个cookie中,作为访问记住的信息的键。让我们的网站检查cookies是否存在&如果它们匹配你的数据库表&获取用户id