2016-04-03 142 views
-1

因此,当谈到注册/登录以及电子邮件时,我有点儿不高兴。我的问题是我想要制作验证邮件。我已经有了一个正常运行的电子邮件,当你点击注册按钮时会发送给你(如果你想查看它是rediku.com)。问题是电子邮件最初使其具有带有隐藏字段的表单,该隐藏字段具有可用于识别用户并验证它们的生成令牌。不幸的是,电子邮件客户端会阻止邮件中的表单。所以我不得不求助于使用锚链接。如何验证新帐户

基本上,我的问题是...我如何通过向他们发送带有链接的电子邮件来验证特定的个人帐户?

+0

检查一些您看到了用于提示激活的。只需发送一个参数为'yoursite.com/verify.php?token = sometokenhere'的链接,在该页面上验证令牌(如果未过期)。 – JimL

+0

这方面你有什么问题?你试过什么了? – NineBerry

+0

我试过用我的令牌使用隐藏的表单标签,但不幸的是电子邮件客户端阻止...我不知道甚至从这样的事情开始。 – joeldesante

回答

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 
    } 
} 
+1

虽然这是非常基本的。请考虑使用库和框架来关心这样的东西。有很多安全的东西需要考虑...... – Hafenkranich

+0

当我尝试从url获取GET标记变量,并运行if(empty($ _ GET ['token'])){}'它是空的。 – joeldesante

+0

链接是什么样的? – Hafenkranich