因此,当涉及到注册/登录以及电子邮件时,我有点像菜鸟。我的问题是我想发一封验证邮件。我已经有一个正常运行的电子邮件,当您点击“注册”按钮时会发送给您(如果您想查看它的rediku.com)。问题是,当电子邮件最初制作时,它有一个带有隐藏字段的表单,该字段具有生成的令牌,可用于识别用户并验证它们。不幸的是,电子邮件客户端会阻止包含表单的电子邮件所以我不得不求助于使用锚链接。
基本上,我的问题是......如何通过向他们发送带有链接的电子邮件来验证特定人员帐户?
答案 0 :(得分:0)
我假设您的网站上有注册表格。 我假设您将数据发送到名为performRegistration.php的文件。
在performRegistration.php里面:
// TBD sanitizing input data
$newUser = new User(); // I am assuming you build a class for your users
$newUser->setVerified(false);
// TBD save form data to user object
// generate a custom key for new user
$newUser->setRegisterKey = MD5('someSaltString'.date('u')); // very basic!
$newUser->save(); // validate data (like user already registered, and stuff like that) and save to db
$newUser->sendRegistrationMail(); // I like libs like swiftmailer
正如@JimL指出的那样,你应该使用带有令牌的基本链接。
我会这样做:yoursite.com/verify.php?verify[username]=aUsername&verify[token]=theMd5TokenGenerated
这样,您可以在数据库中查找用户名并检查生成的相应密钥。如果要在验证过程中查找数据集(如果未向链接添加(唯一)用户名),则必须确保两个用户不会获得相同的注册密钥。
在verify.php里面:
// TBD catch $_GET and sanitize data
$getVars = $_GET['verify'];
if(array_key_exists('token', $getVars)){
if(!empty($_GET['token']) && !empty($_GET['username'])) {
// TBD get user from db where username and key match the submitted values from the link
// if you can find a matching dataset:
$newUser->setVerified(true);
// start a session, add a cookie, login user
// do some great stuff
}
}