20

http://laravel.com/docs/eloquentによると、モデルで保護された $hidden 変数を使用して、配列または JSON 変換から属性を非表示にすることができます。

class User extends Eloquent {
    protected $hidden = array('password');
}

ただしprint_r(User::all())、暗号化されたパスワードを実行すると、ユーザーオブジェクト内でサーバーからクライアントに送信されます。

これは 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] => admin@admin.com
                        [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
                    )
4

3 に答える 3

37

を実行するUser::all()と、 Collection オブジェクトが返されます。このコレクションには、すべてのユーザーがオブジェクト形式で含まれています。したがって、ユーザーにはパスワードが含まれます。これは、ハッシュ化されたパスワードを何らかの理由で表示できるようにするためです。ただし、前に言ったように、コレクションまたはユーザーを配列または JSON に変換すると、パスワード フィールドは非表示の場合はなくなるはずです。

したがって、それらを取り除きたい場合は、次のコマンドを実行してみてください。

$array_of_users = Users::all()->toArray();
$json_of_users = Users::all()->toJson();

dd()これらは両方とも検査します。パスワード欄はなくなります。

これは、シリアル化に関する Laravel のドキュメントで説明されています。

于 2013-09-26T21:46:45.797 に答える
0

laravel では、任意のエンティティを表すコントローラー内のモデル オブジェクトを返すと、JSON に変換されます。
これは API の作成に役立ち、非表示のフィールドが非常に役立ちます

于 2016-07-03T05:27:25.207 に答える