laravel - Laravel 可加密特征认证失败
问题描述
我在我的 Laravel 5.5 中遇到了身份验证处理问题。我Encryptable
根据这里的这篇文章安装了一个特征。然后,我使用身份验证生成器来建立基本路由、视图和处理程序。
我可以成功注册新帐户并直观地看到所有数据都已加密,但我无法通过登录屏幕成功进行身份验证。
这似乎在Auth::attempt($credentials)
通话期间失败了。我的故障排除指向可加密特征,因为当我注释掉该部分时,身份验证工作正常。
有人可以提供有关如何使用这种模型加密方法处理身份验证的见解吗?
我尝试禁用用户名字段的加密,但这似乎没有帮助。密码字段从未被加密,因为它正在被 bcrypt 散列。
第一次编辑:因此,了解特征如何工作......Encryptable
特征似乎重载了 getAttribute/setAttribute 函数。这意味着 Eloquent 的 , 等查询函数where
将find
只是“查看”加密值。
第二次编辑:为特征提供的源代码Encryptable
没有为未加密的值返回正确的值。这已更改并恢复了身份验证。对于那些使用相同代码片段的人,在get_attribute()
函数中更改else
块,使其return $value;
.
我感谢所有的见解,丹
解决方案
这种形式的加密将使您无法在表格中搜索加密字段。您将无法重现相同的字符串,因为 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 中运行可以让您看到 encrypt 在后续运行中返回完全不同的值:
>>> 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="
因此,您可能希望对实际加密的内容有所选择。加密敏感的东西,你不会用它来查找实体。这可能是诸如社会安全号码、政府身份证、信用卡号码和银行帐号之类的东西。
推荐阅读
- ssh - Performance Testing of SFTP server using jMeter
- shell - 没有在 jenkinsfile 中获取变量值
- vue.js - VueJS 渲染函数 - 如何添加对另一个组件的引用?
- react-native - 如何将参数从其他 Stack React Native 传递给 Stack?
- jira - (Jira Software Server) IntelliJ 不会识别 atlassian 导入
- java - 如何将列拆分为列表并将其保存到新的 .csv 文件中
- c# - 从URL下载csv文件返回html页面c#
- flutter - 在颤动中点击容器内部
- git - Git状态:将某些文件显示为未修改,以便人们不会添加/提交它们
- scala - 在 spark scala 中读取大文件时数据丢失