如何阻止 Laravel 4 返回密码?

Pet*_*icz 1 php mysql laravel laravel-4

我正在使用 laravel 4 开发应用程序。我正在对两个表执行以下连接:

$listings = DB::table('user')
    ->join('listings', 'listings.agent_id', '=', 'user.id')
    ->where('user.user_level', '=', 3)
    ->get();

var_dump($listings);
Run Code Online (Sandbox Code Playgroud)

这不是按预期工作,但在 var_dump 中它返回散列密码,我不希望它这样做。

public 'password' => string '$2y$10$o58S16Tw2yc2uvcIs.cy3.lbmyFgUZjTl7nMdLzU2AVXeXVCY5xqK' (length=60)
Run Code Online (Sandbox Code Playgroud)

我的用户模型中有:

protected $hidden = array('password');
Run Code Online (Sandbox Code Playgroud)

但是,我认为这只会将它从 Json 响应中隐藏起来。所以,在这种情况下,我有两个问题:

  1. 像这样泄露密码是不是很糟糕?它回来了,但我仍然不喜欢它在外面的事实。显然,我不会在实时应用程序中像这样使用 var_dump,但是信息在那里的事实让我感到紧张。

  2. 如果是坏的,我该如何预防?我想要表格中的所有其余信息。所以,我可以重写我的查询以返回除密码之外的所有内容,但是有没有更简单的方法来做到这一点?也许我错过了排除查询中行的内容,而不是写出我想要的每一行?

Mel*_*ans 5

首先,我建议您为每个数据库表创建一个模型。

接下来,如果您使用 DB::table('user') ,则您没有使用指定 $hidden 的 User 模型。这样密码就不会被隐藏。

当你这样做时(例如):

$user = User::find(1); // Selects user with id of 1
return Response::json($user); // Gives JSON response
Run Code Online (Sandbox Code Playgroud)

所有用户数据都将显示为 JSON,没有指定的字段:

protected $hidden = ['password']; 
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助你 ;)