【发布时间】:2017-08-08 15:59:19
【问题描述】:
我正在 PHP/Laravel 中构建一个在线和邮寄投票系统,该系统需要一个访问令牌,该令牌由实际用户或管理员在某个时候输入。因此,我假设必须生成令牌,并且不能通过数据库转储追溯到原始用户。
生成此类代码的最佳方法是什么?我查看过 Hashids,但不确定这是否是一个合适的解决方案,除非可以使用以秒为单位的选票创建时间戳作为第二个值与选票 ID 一起使用。
【问题讨论】:
-
如果我理解了这个问题,我相信您会希望将
password_encrypt()与uniqid()一起使用。您将添加uniqid()在数据库中生成的password_encrypt()ed 字符串作为访问权限用户/管理员将获得的代码,当用户/管理员键入它时,您将使用password_verify()来验证它是否与数据库中的字段匹配。 -
@Alesana:这是个好主意,但
uniqid()的问题在于它相当长。我怀疑目标用户在在线标记他们的选票之前会想啄掉 13 个字母和数字,或者当他们可能收到他们必须手动输入的 30 多张选票时,管理员也会这样做。 -
如果你想要一个更短的 id,你可以这样做,但碰撞的可能性很小(两个 id 相同的可能性),但是碰撞的可能性仍然存在。我建议使用带有 crc32b 算法的哈希函数来生成 8 个字符的代码。例如,
hash('crc32b', uniqid()); -
请注意,当我说使用
password_encrypt()时,我实际上是指password_hash()。
标签: php laravel token laravel-5.4