php - custom - Laravel oculta los atributos. Por ejemplo, contraseña-seguridad
laravel documentation auth (3)
Cuando ejecutas User::all()
, devuelve un objeto Collection. Esta colección contiene todos sus usuarios en forma de objeto . Por lo tanto, sus Usuarios contendrán sus contraseñas. Esto es para que pueda mostrar la contraseña con hash por cualquier motivo. Sin embargo, como dijo antes, si transforma la Colección o los Usuarios en arreglos o JSON, el campo de la contraseña debería desaparecer si está oculto.
Por lo tanto, si desea deshacerse de ellos, intente ejecutar lo siguiente:
$array_of_users = Users::all()->toArray();
$json_of_users = Users::all()->toJson();
dd()
estos dos para inspeccionarlos. El campo de contraseña se habrá ido.
Esto se explica en la documentación de Laravel sobre la serialization .
De acuerdo con http://laravel.com/docs/eloquent , uno puede ocultar los atributos de la matriz o la conversión JSON utilizando una variable oculta $ protegida en el modelo.
class User extends Eloquent {
protected $hidden = array(''password'');
}
Genial, sin embargo, al ejecutar print_r(User::all())
la contraseña cifrada se envía del servidor al cliente dentro del objeto Usuario.
Esto no solo se limita a print_r (), si se consulta al usuario específico, $user->password
mostrará la contraseña cifrada en la vista.
¿Hay alguna forma de detener esto? Cada vez que se consulta mi objeto de usuario, la contraseña se enviará como parte de los datos, aunque no sea necesario.
Illuminate/Database/Eloquent/Collection Object
(
[items:protected] => Array
(
[0] => User Object
(
[hidden:protected] => Array
(
[0] => password
)
[connection:protected] =>
[table:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 1
[email] => [email protected]
[first_name] => Admin
[last_name] => User
[password] => $2y$10$7Wg2Wim9zHbtGQRAi0z6XeapJbAIoh4RhEnVXvdMtFnwcOh5g/W2a
[permissions] =>
[activated] => 1
[activation_code] =>
[activated_at] =>
[last_login] =>
[persist_code] =>
[reset_password_code] =>
[created_at] => 2013-09-26 10:24:23
[updated_at] => 2013-09-26 10:24:23
)
En laravel, si devuelve cualquier objeto modelo en el controlador que represente a cualquier entidad, se convertirá a JSON.
Eso es útil para la creación de API, y hay campos ocultos que ayudan mucho
No, porque NO debes hacer algo así en la producción (o en el mundo real).
Sus vistas, escritas en Blade, pueden recibir un resultado de User::all()
y procesarlo, pero eso es PHP (servidor), no HTML (cliente), y transformará esos datos a HTML antes de que se pasen al cliente.
Así que esto
print_r(User::all())
Es algo que nunca hará para mostrárselo a un usuario, es algo que usamos para depurar, pero en realidad no significa nada.
Pero si tiene otros ejemplos, cuando los datos confidenciales se pueden pasar a través de una vista a su cliente, también podemos discutirlo.