php - 使用加密创建基于电子邮件的密码重置功能
问题描述
尝试创建基于电子邮件的密码重置功能,但需要加密 URL
更改密码.php
<?php
if($_GET){
$email=base64_decode($_GET['email']);
}
else
{
echo "Url has no user";
}
if(isset($_POST['submit'])){
$email=$_POST['email'];
$password=$_POST['password'];
$obj=new commands();
$obj->update_password($email,$password);
}
?>
<form action="" method="post" id="my_form" class="mt-3">
<div class="form-group">
<label class="tags">ENTER NEW PASSWORD</label>
<input type="text" name="email" value="<?php echo $email; ?>">
<input type="password" name="password" id="password" class="form-control" autocomplete="off" placeholder="new password">
</div>
<div class="form-group">
<input type="submit" value ="submit" name="submit" class="btn btn-primary btn-block">
</div>
</form>
forgot_password.php
<?php
if(isset($_POST['submit'])){
$email=$_POST['email'];
$obj=new commands();
$obj->forgot_passowrd($email);
}
?>
<form action="" method="post" id="my_form" class="mt-3">
<div class="form-group">
<label class="tags">EMAIL ADDRESS</label>
<input type="email" name="email" id="email" class="form-control" autocomplete="off" placeholder="name@address.com">
</div>
<div class="form-group">
<input type="submit" value ="submit" name="submit" class="btn btn-primary btn-block">
</div>
</form>
功能
function forgot_passowrd($email){
$to = $email;
$subject = "Forgot Password";
$url= base64_encode('/test/change_password.php?email=$email');
$message = "
<html>
<head>
<title></title>
</head>
<body>
<h1>Hello Change ur password</h1>
<a href='$url';>Change Password</>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <mymemail@gmail.com>' . "\r\n";
mail($to,$subject,$message,$headers);
header('Location: login.php?msgF=' . urlencode(base64_encode("Check Mail To Reset Password")));
}
function update_password($email,$password){
$sql= $this->con->prepare("UPDATE user SET password=:password where email=:email");
$sql->bindParam(':email', $email);
$sql->bindParam(':password', base64_encode($password));
$sql->execute();
header('location:login.php');
$this->con= null;
header('Location: login.php?msgC=' . urlencode(base64_encode("Password Changes Succesfully")));
}
在这里,我使用电子邮件功能向用户发送电子邮件以重置密码,并在 url 中附加 $email。我想加密该网址,但在加密该网址后无法访问(显然)但是有没有其他方法可以加密我的网址,因此电子邮件将不可见该网址,并且更改密码的功能仍然有效。
解决方案
如果您想对公众隐藏电子邮件地址,您可以只加密电子邮件地址而不是整个 URL。
'/test/change_password.php?email='.encrypt($email);
然后收到如下电子邮件地址,
if($_GET){
$email=decrypt($_GET['email']);
}
我希望这对你有帮助。
推荐阅读
- java - 如何替换矩阵内的元素?
- javascript - 我将如何在我的 Discord.js 机器人中实施许可证密钥?
- docusignapi - DocuSign 刷新令牌过期时返回的错误是什么?
- python - 当 slot 函数具有默认参数=None 时,PySide2 的行为与 PySide 不同
- github - 我如何在 github 上回滚,即使只是在本地?
- c# - 为什么我生成的网格有偏移?
- javascript - 如何在 React Native expo 中将捕获的图像保存到文件管理器
- dafny - 将数字转换为字符串
- electron - 如何在没有遥控器的情况下创建关闭、最大化和最小化按钮?
- ansible - Ansible:查找匹配模式在正则表达式中显示错误