我的Laravel 5.5中的身份验证处理遇到了麻烦。我根据this post here安装了Encryptable
特征。然后我使用身份验证生成器来建立基本路由,视图和处理程序。
我可以成功注册新帐户并直观地看到所有数据都已加密,但我无法通过登录屏幕成功进行身份验证。
在Auth::attempt($credentials)
电话中,这似乎失败了。我的故障排除指向可加密的特性,因为当我评论该部分时,身份验证工作正常。
有人可以提供有关如何使用此模型加密方法处理身份验证的见解吗?
我尝试禁用用户名字段的加密,但这似乎没有帮助。密码字段从未被加密,因为它正被bcrypt哈希。
第一编辑:
因此,了解traits如何工作...... Encryptable
trait似乎重载了getAttribute / setAttribute函数。这意味着Eloquent的查询功能如where
,find
等只会“查看”加密值。
第二编辑:
为Encryptable
特征提供的源代码未返回未加密值的正确值。这已更改,身份验证已恢复。对于使用相同代码段的用户,请在get_attribute()
函数中更改else
块,使其return $value;
。
我很欣赏所有的见解, 丹
答案 0 :(得分:0)
这种加密形式将使您无法在表中搜索加密字段。您将无法重现相同的字符串,因为Laravel在生成加密数据时使用随机iv。 IV或初始化向量与散列中的盐具有相似的用途,用于随机化存储的数据。
由于这种数据随机化,您甚至无法通过重新加密搜索数据来搜索您的表格:
User::where('email', Crypt::encrypt('email@email.com'));
// won't find anything even if an encrypted value of email@email.com exists
在交互式shell中运行可以让您看到加密在后续运行中返回一个完全不同的值:
>>> json_decode(base64_decode(Crypt::encrypt('email@email.com')))->value
=> "zpA0LBsbkGCAagxLYB6kiqwJZmm7HSCVm4QrUw6W8SE="
>>> json_decode(base64_decode(Crypt::encrypt('email@email.com')))->value
=> "VKz8CWVzR66cv/J7J09K+TIVwQPxcIg+SDqQ32Sr7rU="
因此,您可能希望选择实际加密的内容。加密敏感的东西,你不会用来查找实体。这可能类似于社会安全号码,政府ID,信用卡号码和银行帐号。