所以我创建了一个表单,用户可以在其中发送一些请求。该请求将存储在数据库中,并将通过电子邮件发送。
请求的查看页面如下所示:
这就是它在电子邮件中的样子:
(这是两个不同的请求,只是想向你们展示它的样子。)
无论如何,我想要的是在电子邮件中添加一个链接,以显示请求的查看页面。 (第一张图)
但事情是这样的,在表单上,我有一个登录页面,用户必须先登录才能查看请求页面。
那么是否可以在电子邮件中添加一个链接,将用户重定向到查看请求页面,当然它应该在点击时自动登录。
这是电子邮件代码的表单:
$email_from = "PC Request";//<== update the email address
$email_subject = "PC Request for $account";
$email_body = "Here are the specifications:\n\n".
"Requested by: $reqname\n".
"Start Date: $month/$day/$year\n".
"Employee Name: $empname\n".
"Position: $position\n".
"Account: $account\n".
"Platform: $platform\n".
"Processor: $processor\n".
"RAM: $ram\n".
"Monitor: $monitor\n".
"Phone: $phone\n".
"Phone Type: $phonetype\n".
"Headset: $headset\n".
$to = "email@email.com";//<== update the email address
$headers = "From: $email_from \r\n";
//$headers .= "Reply-To: $visitor_email \r\n";
//Send the email!
mail($to,$email_subject,$email_body, $headers);
//done. redirect to thank-you page.
//header('Location: index.php');
echo "<script>alert('Successfully sent!'); window.location='index.php'</script>";
}
}
?>
最佳答案
这可以通过创建一个表来存储与用户 ID 关联的临时 token 来完成。当您发送电子邮件时,您会在表中插入一条记录,其中包含生成的 token 、用户 ID 和时间戳。你可以generate tokens与:
$token = bin2hex(random_bytes(16));
电子邮件中的链接类似于 http://yoursite.com/request.php?token=GENERATED_TOKEN
在 request.php
的代码中,您将在数据库中搜索给定的 token (包含在 $_GET['token']
中)并检查时间戳是否在有效期内(比如在最近 2 小时内创建的)。如果有效,则此时您可以验证使用该 token 存储的用户 ID。一旦他们通过身份验证,您还需要从表中删除条目,这样 token 就不能再次使用。
基本身份验证不是一个好方法,因为用户名和密码必须在电子邮件中以纯文本形式发送(您不应以纯文本表示形式可恢复的方式存储密码)。
关于php - 是否可以添加一个链接,在单击时会登录用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369957/