LARAVEL Payload是无效错误,但解密数据是正确的

时间:2018-01-31 11:39:37

标签: php laravel encryption payload mutators

最近我用作曲家制作了一个新项目,并用make:auth添加了非常基本的认证 - 没什么特别的。

接下来,我想加密数据库中的名称电子邮件列,以便将其类型从VARCHAR(191)更改为LONGTEXT,并向用户模型添加一些非常基本的变更器

public function setNameAttribute($value) {
    $this->attributes['name'] = Crypt::encryptString($value);
}

public function getNameAttribute($value) {
    return Crypt::decryptString($value);
}

public function setEmailAttribute($value) {
    $this->attributes['email'] = Crypt::encryptString($value);
}

public function getEmailAttribute($value) {
    return Crypt::decryptString($value);
}

但是当我使用我非常简单的路线进行测试时,即使我在错误内容中看到字段已被正确解密,我也会收到Payload无效错误。

Route::get('user',function(){
$user= \App\User::find(3);
//dd($user->name);
dd(Crypt::decryptString($user->name));
dd(Crypt::decryptString($user->email));

});

截图链接 https://ibb.co/deBPpR

1 个答案:

答案 0 :(得分:2)

错误是因为您在已经变异(和解密)的名称属性上调用Crypt::decryptString。即你的getNameAttribute解密加密的字符串,并在你打电话时

Crypt::decryptString($user->name); // this is causing the error

您基本上会再次传递解密的字符串进行解密。

只需:

echo $user->name;

您将获得解密的名称。

如果您真的想查看原始值,请使用:

echo $user->getOriginal('name'); //get original value from DB bypassing the accessor