【问题标题】:How to verify new accounts [closed]如何验证新帐户[关闭]
【发布时间】:2016-04-03 16:27:44
【问题描述】:

所以我在注册/登录以及电子邮件方面有点菜鸟。我的问题是我想发一封验证邮件。我已经有一封正常工作的电子邮件,当您点击注册按钮时会发送给您(如果您想查看它是 rediku.com)。问题是最初制作电子邮件时,它有一个带有隐藏字段的表单,该表单具有生成的令牌,可用于识别用户并验证他们。不幸的是,电子邮件客户端会阻止带有表单的电子邮件。所以我不得不求助于使用锚链接。

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

【问题讨论】:

  • 检查您自己获得的一些激活以获取提示。只需发送一个带有参数yoursite.com/verify.php?token=sometokenhere 的链接,在该页面上验证令牌(如果它没有过期)。
  • 您有什么问题?到目前为止,您尝试过什么?
  • 我已经尝试在我的令牌中使用隐藏的表单标签,但不幸的是电子邮件客户端阻止了它......我什至不知道从哪里开始这样的事情。

标签: php html email mysqli html-email


【解决方案1】:

我假设您的网站上有一个注册表单。 我假设您将数据发送到名为 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
    }
}

【讨论】:

  • 这是非常基本的。请考虑使用库和框架来为您处理类似的事情。有很多安全问题需要考虑...
  • 当我尝试从 url 获取 GET 令牌变量并运行 if(empty($_GET['token'])) {} 时,它为空。
  • 链接是什么样的?
  • 试试var_dump($_REQUEST);
  • 我编辑了答案以更详细地了解验证数据获取。 (也更改了链接!)
猜你喜欢
  • 2011-03-14
  • 2013-10-16
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2012-06-30
  • 2022-11-20
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多