php - 是否可以添加一个链接,在单击时会登录用户?

标签 php html mysql database forms

所以我创建了一个表单,用户可以在其中发送一些请求。该请求将存储在数据库中,并将通过电子邮件发送。

请求的查看页面如下所示:

View Requests

这就是它在电子邮件中的样子:

Request on email

(这是两个不同的请求,只是想向你们展示它的样子。)

无论如何,我想要的是在电子邮件中添加一个链接,以显示请求的查看页面。 (第一张图)

但事情是这样的,在表单上,​​我有一个登录页面,用户必须先登录才能查看请求页面。

Login Tab

那么是否可以在电子邮件中添加一个链接,将用户重定向到查看请求页面,当然它应该在点击时自动登录。

这是电子邮件代码的表单:

$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/

相关文章:

MySQL:使用 .group() 时包含非聚合列错误 | rails 5.2

php - 加入、联合、合并?

python - psycopg2 与 MySQLdb 反斜杠转义行为

php - Symfony 4多重保护验证器重定向问题

html - CSS:如何根据不同的尺寸设置屏幕布局

php - 使用 PHP 将日期和时间保存到 MySQL 时遇到问题

javascript - 悬停颜色叠加 : jquery mosaic plugin

html - 如何在列表框中放置滚动条?

php - 检查 ID 是否已经在数据库中,如果是,请不要再次插入它

php - 在导航栏中有图像