添加加密功能“有效载荷无效”后出现错误

时间:2019-03-03 11:42:41

标签: laravel laravel-5

我使用了这位先生的待办事项应用程序,它运行完美。

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');
    }
}

1 个答案:

答案 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块来处理此问题。如果您有一些未加密的数据,那么它只会为您提供数据而不会尝试对其解密。