use*_*944 9 php laravel laravel-4 laravel-5
我在我的数据库中有一个表,keys它具有以下结构:
id | user_id | token_id | token_key
Run Code Online (Sandbox Code Playgroud)
每次用户登录我的网站时,我都需要为该用户生成一个新的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
Run Code Online (Sandbox Code Playgroud)
表中没有其他行与令牌组合.我怎样才能做到这一点?
Jam*_*mes 20
在生成令牌方面,您可以使用Laravel的Helper函数之一 ; str_random().
这将生成指定长度的随机字符串,例如,str_random(16)将生成16个字符的随机字符串(大写,小写和数字).
根据您使用令牌的方式,它们真的需要完全独特吗?鉴于它们将与用户匹配,或者我认为你可能正在使用它token_id然后验证这token_key是否真的重要,如果它们中的一个加倍? - 虽然这个机会非常小!
但是,如果确实需要它们才能真正独特,则可以始终使用带unique约束的验证器.使用这个软件包你也可以测试它们中的两个也是唯一的unique_with.然后,如果验证器失败,则根据需要生成新令牌.
根据您的示例,您将使用str_random(16)for token_id和str_random(30)for token_key.
Oli*_*vic 15
对于像这样的情况,我会避免包含额外的包裹.就像是:
do {
$token_id = makeRandomToken();
$token_key = makeRandomTokenKey();
} while (User::where("token_id", "=", $token_id)->where("token_key", "=", $token_key)->first() instanceof User);
Run Code Online (Sandbox Code Playgroud)
...应该做.如果与"用户"不同,请将模型名称替换为您的名称,并使用您或建议的函数创建随机字符串.
| 归档时间: |
|
| 查看次数: |
39120 次 |
| 最近记录: |