我使用了这位先生的待办事项应用程序,它运行完美。
https://github.com/ericlie/Laravel-Simple-Todo-List#setting-up
我尝试使用这位先生的回答将加密和解密添加到此应用程序中。
Encryption and decryption in Laravel 5
但是在添加代码后出现此错误-
有效载荷无效
我一直在搜索并尝试加密和解密功能,但是它总是显示相同的错误。
谁能告诉我我的代码出了什么问题?
我想在Task表的 task 列和“ users”表的 name 和 email 列上使用加密和解密。
这是我的任务控制者-
class Task extends Model
{
// I add this
use EncryptsAttributes;
protected $encrypts = ['task'];
// original code
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
}
答案 0 :(得分:0)
我已经尝试了您共享的代码,并弄清了问题的可能原因-
您的 EncryptsAttributes.php 特征在return decrypt($this->attributes[$key])
上出现此错误。
public function getAttributeValue($key) {
if(in_array($key, $this->getEncrypts())) {
return decrypt($this->attributes[$key]);
}
return parent::getAttributeValue($key);
}
decrypt()
无法在未加密字符串上使用。现在,task
列中有一些未加密的数据,并且此decrypt()
函数正在尝试解密未加密的数据。
解决此问题的方法是,您可以解密task
列中的所有现有数据,也可以通过以下方式进行处理-
public function getAttributeValue($key)
{
if(in_array($key, $this->getEncrypts())) {
try {
return decrypt($this->attributes[$key]);
} catch (\Exception $e) {
return $this->attributes[$key];
}
}
return parent::getAttributeValue($key);
}
这取自您的 EncryptsAttributes.php 特性。我添加了try / catch块来处理此问题。如果您有一些未加密的数据,那么它只会为您提供数据而不会尝试对其解密。