在我的系统中,任何用户都不允许注册。必须通过电子邮件邀请他们。
我需要验证用户是否在系统上处于活动状态。为此,用户将收到一封电子邮件,其中包含验证您帐户的特定URL。
此URL(路由)可能包含用户标识和在"预注册"后保存在数据库中的验证代码。
hostname/accountConfirm?user=token&cod=userCodeSavedOnTheDatabase
令牌必须从用户电子邮件生成。
如何生成令牌并检查它以识别用户?
你有没有用谷歌搜索你的问题…?stackoverflow.com/a/18910943/2518525
我建议使用类似的方法来生成代码
$code = bin2hex(openssl_random_pseudo_bytes(40));
将它与识别用户可能需要的任何其他信息存储在数据库中。在注册过程中验证代码,然后将其删除或以某种方式使其无效(例如设置"已使用"标志)
生成这样的随机字符串,并使用用户电子邮件作为密码,这是一个选项,或者使用任何内置的PHP函数来生成令牌。
$pool ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$token= '';
for ($i = 0; $i < 8; $i++){
$token.= substr($pool, mt_rand(0, strlen($pool) -1), 1);
}
$cipher = new McryptCipher($user_email);
$encrypted_token= $cipher ->encrypt($token);
号
就验证而言,您可以选择将令牌和一些用户数据保存到表中,或者向令牌添加过期时间,并清除函数以删除过期的注册和垃圾邮件注册。另一种选择是将临时注册保存到文件中。
$epxire_time = timestamp() + 1800; // 30 min
$pending_registration = json_encode['token' => $encrypted_token, 'user' => $user_email,'epxire' => $epire_time];
file_put_contents($path/to/file/,$pending_registrations);
向用户发送电子邮件确认,并提供验证链接。验证过程中,您通常会从URL检索参数;
$token = $_GET['token'];
// additional param
// decrypt the token
$token = $cipher->decrypt($token );
$file = file_get_contents($path/to/file);
。
和验证令牌,验证令牌过期,用户电子邮件,就像你通常做的那样……
if($valid_token){
// save user, redirect to login
}else{
// return response invalid token
return json_encode['statusCode' => 400, 'errorMessage' => 'Invalid ...','urltorequestnewotken' => 'http://...'];
}
将挂起的注册保存到一个临时文件中,这只是另一种减少垃圾邮件和僵尸程序干扰数据库的方法,就像使用验证码一样。希望能帮上忙。