How to generate token to validate account via url?
在我的系统中,任何用户都不允许注册。必须通过电子邮件邀请他们。
我需要验证用户是否在系统上处于活动状态。为此,用户将收到一封电子邮件,其中包含验证您帐户的特定URL。
此URL(路由)可能包含用户标识和在"预注册"后保存在数据库中的验证代码。
1 | hostname/accountConfirm?user=token&cod=userCodeSavedOnTheDatabase |
令牌必须从用户电子邮件生成。
如何生成令牌并检查它以识别用户?
我建议使用类似的方法来生成代码
1 |
将它与识别用户可能需要的任何其他信息存储在数据库中。在注册过程中验证代码,然后将其删除或以某种方式使其无效(例如设置"已使用"标志)
生成这样的随机字符串,并使用用户电子邮件作为密码,这是一个选项,或者使用任何内置的PHP函数来生成令牌。
1 2 3 4 5 6 7 |
号
就验证而言,您可以选择将令牌和一些用户数据保存到表中,或者向令牌添加过期时间,并清除函数以删除过期的注册和垃圾邮件注册。另一种选择是将临时注册保存到文件中。
1 2 3 4 | $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检索参数;
1 2 3 4 5 | $token = $_GET['token']; // additional param // decrypt the token $token = $cipher->decrypt($token ); $file = file_get_contents($path/to/file); |
。
和验证令牌,验证令牌过期,用户电子邮件,就像你通常做的那样……
1 2 3 4 5 6 | if($valid_token){ // save user, redirect to login }else{ // return response invalid token return json_encode['statusCode' => 400, 'errorMessage' => 'Invalid ...','urltorequestnewotken' => 'http://...']; } |
将挂起的注册保存到一个临时文件中,这只是另一种减少垃圾邮件和僵尸程序干扰数据库的方法,就像使用验证码一样。希望能帮上忙。