laravel 更新数据库表中的加密值时出错(有效负载无效)

jhkqcmku  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(125)

我的passport字段在我的judokas迁移中是string。我想加密此字段,并只在视图和更新表单字段中解密它,当创建记录时一切正常,该字段被加密。问题是当我通过更改passport的值进行测试时,错误有效负载无效在行return Crypt::decryptString($value);

<?php

namespace App\Models;

use App\Events\FighterDeletedEvent;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Database\Eloquent\Model;

class JudokaModel extends Model
{
    use HasFactory;
    public $timestamps = false;
    protected $table = 'jodokas';
    protected $primaryKey = 'id';
    protected $fillable = [
        'passaport',
    ];

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

    public function getPassaportAttribute($value)
    {
        return Crypt::decryptString($value); // The payload is invalid.
    }
}

如何解决这个问题?

uyhoqukh

uyhoqukh1#

尝试捕获DecryptException并在解密失败时返回默认值。

public function getPassaportAttribute($value)
{
    try {
        return Crypt::decryptString($value);
    } catch (DecryptException $e) {
        return $value;
    }
}

相关问题