http://laravel.com/docs/eloquent によると、モデルの保護された$ hidden変数を使用して、配列またはJSON変換から属性を非表示にすることができます。
_class User extends Eloquent {
protected $hidden = array('password');
}
_
すばらしいですが、print_r(User::all())
を実行すると、暗号化されたパスワードがUserオブジェクト内のサーバーからクライアントに送信されます。
これは、print_r()だけに限定されているわけではなく、特定のユーザーが照会された場合、_$user->password
_は暗号化されたパスワードをビューに表示します。
これを止める方法はありますか?ユーザーオブジェクトが照会されるたびに、パスワードは必要ありませんが、データの一部として送信されます。
_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
)
_
User::all()
を実行すると、Collectionオブジェクトが返されます。このコレクションには、すべてのユーザーがオブジェクト形式で含まれています。したがって、ユーザーにはパスワードが含まれます。これは、何らかの理由でハッシュされたパスワードを表示できるようにするためです。ただし、前に述べたように、コレクションまたはユーザーを配列またはJSONに変換する場合、パスワードフィールドは非表示にすると表示されなくなります。
したがって、それらを削除したい場合は、次のコマンドを実行してみてください。
_$array_of_users = Users::all()->toArray();
$json_of_users = Users::all()->toJson();
_
dd()
これらの両方を検査します。パスワードフィールドはなくなります。
これはLaravelの serialization に関するドキュメントで説明されています。
いいえ、そのようなことを本番環境(または実世界)で行うべきではありません。
ブレードで記述されたビューはUser::all()
結果を受け取って処理できますが、これはHTML(クライアント)ではなくPHP(サーバー)であり、データを変換しますクライアントに渡される前にHTMLに変換されます。
したがって、この
print_r(User::all())
ユーザーに表示することは決してないものであり、デバッグに使用するものですが、実際には何も意味しません。
ただし、他の例がある場合、機密データがビューを介してクライアントに渡される可能性がある場合は、それについても議論できます。
laravelでは、任意のエンティティを表すコントローラー内の任意のモデルオブジェクトを返す場合、JSONに変換されます。
これはAPIの作成に役立ち、非表示フィールドがあると非常に役立ちます