在 CodeIgniter 3 中生成用于电子邮件验证的令牌

Psy*_*gno 2 php authentication codeigniter token

我正在 CI3 中构建登录/注册系统,但我有疑问。而不是使用:

$key=md5(uniqid());
Run Code Online (Sandbox Code Playgroud)

用于发送电子邮件激活密钥...我可以使用其他方法吗?我不知道,使用数据库(mysql)?可能用SHA1散列?我不想要最安全的方式,只是一个不像 uniqid() 那样虚假的解决方案。因为我知道 uniqid() 生成的 id 并不是真正随机的,所以没有理由散列到 md5 只是......愚蠢。

先感谢您。

Abd*_*lam 5

实际上电子邮件验证/密码生成应该是

  1. 容易理解
  2. 容易回来

这意味着如果你发送md5发生的事情,用户得到的字长为 32。这是非常糟糕的迹象。

MD5 例子

8b1a9953c4611296a827abf8c47804d7
Run Code Online (Sandbox Code Playgroud)

我建议你是什么

在 codeigniter 中有一个帮助调用String。用那个。

有5种不同的选择来挑选你

  1. α
  2. 名册
  3. 基本的
  4. 数字
  5. 没有零

这个怎么用?

在控制器中加载助手

$this->load->helper('string');
Run Code Online (Sandbox Code Playgroud)

然后只需添加这个

random_string([$type [, $len]]) ;
Run Code Online (Sandbox Code Playgroud)

例子 :

random_string('alnum', 8);
Run Code Online (Sandbox Code Playgroud)

这些如何彼此不同?

假设:在这些场景中长度为 8。

α

这将只打印带有大写示例的字符串
AKTHDOGK

名册

这将打印带有 UPPER 和 LOWER Case示例的字符串
JdKsPeeU

基本的

这将使用mt_rand()in php打印随机数
例子 12756079

数字

这将打印数字字符串
示例 01234567 (未使用。所以不确定)

没有零

这将打印和编号。但是没有零 示例 12345678 (未使用。所以不确定)


仅供参考:我从未使用过numericnozero。所以我不知道这个例子。但是我使用了所有其他功能。