【问题标题】:Generate a token for email verification in CodeIgniter 3在 CodeIgniter 3 中生成用于电子邮件验证的令牌
【发布时间】:2025-12-23 12:30:11
【问题描述】:

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

$key=md5(uniqid());

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

提前谢谢你。

【问题讨论】:

  • 问题是所有依赖随机性的方法都受到操作系统/硬件可以提供的方法的限制。也就是说,就唯一性而言,UUID 应该足够了。

标签: php codeigniter authentication token


【解决方案1】:

其实邮箱验证/密码生成应该是

  1. 简单易懂
  2. 轻松找回

这意味着如果您发送 md5,用户会得到 32 个字长。这是非常糟糕的迹象。

MD5 示例

8b1a9953c4611296a827abf8c47804d7

我建议你的是

在 codeigniter 中有一个助手调用 String。使用它。

有 5 种不同的选择供你选择

  1. 阿尔法
  2. alnum
  3. 基本
  4. 数字
  5. nozero

这个怎么用?

在控制器中加载助手

$this->load->helper('string');

然后添加这个

random_string([$type [, $len]]) ;

示例:

random_string('alnum', 8);

这些有什么区别??

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

阿尔法

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

alnum

这将打印 大写和小写的字符串
示例 JdKsPeeU

基本

这将打印在 php 中使用 mt_rand() 的随机数
示例 12756079

数字

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

nozero

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


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

【讨论】: