我的数据库中有一个名为keys
的表,它具有以下结构:
id | user_id | token_id | token_key
每次用户登录我的站点时,我需要为该用户生成一个新的token_id
和token_key
集。如何为token_id
和token_key
生成一个随机令牌,同时保持这两个值的唯一性?
例如,如果:
token_id
是dfbs98641aretwsg
,token_key
是sdf389dxbf1sdz51fga65dfg74asdf
含义:
id | user_id | token_id | token_key
1 | 1 | dfbs98641aretwsg | sdf389dxbf1sdz51fga65dfg74asdf
表中不可能有其他行具有该令牌组合。我该怎么做?
6条答案
按热度按时间q1qsirdb1#
在生成令牌方面,您可以使用Laravel的Helper函数之一;
str_random()
.这将生成指定长度的随机字符串,例如
str_random(16)
将生成16个字符(大写、小写和数字)的随机字符串。根据您使用令牌的方式,它们真的需要完全唯一吗?假设它们将与用户匹配,或者我假设您可能正在使用
token_id
,然后针对token_key
验证这一点,如果其中一个出现双重情况真的有关系吗?-尽管这种可能性非常小!然而,如果你确实需要它们是真正唯一的,你总是可以使用带有
unique
约束的验证器,使用this package你也可以使用unique_with
测试它们两个是否是唯一的,然后如果验证器失败,它会根据需要生成一个新的令牌。根据您的示例,您可以将
str_random(16)
用于token_id
,将str_random(30)
用于token_key
。3bygqnnd2#
我会避免为这种情况额外提供一个包裹。比如:
...应该可以。如果与“User”不同,请将型号名称替换为您的名称,并使用您的或建议的函数创建随机字符串。
dwthyt8l3#
您可以使用依赖项来完成此操作。Dirape laravel-token
运行命令
在控制器中使用
您可以像这样使用它:
e0bqpujr4#
根据艾芬豪的建议......这是我想到的:
rqmkfv5c5#
对于看到这篇文章的其他用户。我发现最好的解决方案是使用另一个字符串或intiger来制作一个令牌。例如,当创建一个新用户时,laravel在做什么。
0sgqnhkj6#
我觉得这样更好: