Laravel encryp($ value)未保存到数据库

时间:2018-01-05 20:42:28

标签: laravel laravel-5

我的用户模型中有以下代码,$ value在set上加密,但未保存到数据库(MariaDB 10.2 VARCHAR(255)utf8mb4_unicode_ci)。当我显示加密值并将其手动粘贴到数据库时,它会被正确解密。我错过了什么吗?

public function getMyKeyAttribute($value)
{
    if ( $value )
    {
        return Crypt::decrypt($value);
    }
    else
    {
        return $value;
    }
}

public function setMyKeyAttribute($value)
{
    if ( $value )
    {
        return Crypt::encrypt($value);
    }
    else
    {
        return $value;
    }
}   

控制器:

public function update($id, UsersRequest $request)
{       
    $user = \Auth::user();
    $user->update($request->all());

    return redirect('users');
}

请求(与myKey无关):

class UsersRequest extends FormRequest
{

public function authorize() {
    return true;
}

public function rules()
{
        return [
            'name' => 'required'
       ];
}

public function messages()
{
    return [        ];
}


}

1 个答案:

答案 0 :(得分:0)

设置属性需要您填写attributes属性。该方法本身应返回void

public function setMyKeyAttribute($value)
{
    if ($value) 
        $this->attributes['my_key'] = Crypt::encrypt($value);
}  

有关详细信息,请参阅https://laravel.com/docs/5.5/eloquent-mutators#defining-a-mutator

如果你使用的是PHP 7.1,你可以使用它(将加密空字符串,但你应该在设置属性之前检查它):

public function setMyKeyAttribute(string $value) : void
{
    $this->attributes['my_key'] = Crypt::encrypt($value);
}