如何创建特殊链接,以便点击该链接的用户可以访问某个注册页面?

时间:2017-03-29 02:57:03

标签: php laravel

我正在使用Swift邮件程序生成一封电子邮件,当管理员用户为该用户创建帐户时,该电子邮件会发送给用户。我希望该电子邮件包含一个链接,该链接指向只有该​​用户才能访问的帐户注册页面。

我必须做些什么才能使注册页面仅供该用户访问?

1 个答案:

答案 0 :(得分:0)

任何用户都可以访问该页面(因为如果通过邮件链接点击它将是一个GET请求),所以诀窍是使常规访问者找到一个困难的URL。只需创建一个您选择的随机字符串(最好与数据库中的每个用户唯一关联),并追加它到您希望用户访问的页面:

$id = rand(1, 100000); // Grab the unique string from your database here
echo "<a href='page.php?id='" . $id . ">Registration link</a>";

然后,要检查有人访问该页面时是否设置了此ID变量,您可以检查$_GET参数:

if(isset($_GET['id'] && !empty($_GET['id'])) {
  // Code here will be executed on any ID in page.php?id=[any]
}

如果您想检查特定字符串,可以使用:

$id = 1337;
if($_GET['id'] == $id) {
  // Code here will only trigger when visiting page.php?id=1337
}

您还可以通过设置检查登录用户的ID是否与$_GET参数匹配来检查特定用户是否正在访问该页面:

$id = '' // Grab the user's ID from your database here
if(isset($_GET['id'] && !empty($_GET['id']) && $_GET['id'] == $id) {
  // Code here should be written based on the user being logged in
}

很遗憾没有办法阻止别人猜测&#39;您拥有与ID $_GET相关的代码,因为电子邮件无法在POST中打开链接。根据特定 GET请求限制内容是最好的选择,因为有人难以猜测参数所需的确切值。

对于您的具体情况,您应该完全正常使用上面的1337代码。只需在电子邮件中设置<a href>链接即可使用该特定值。

希望这有帮助! :)