休息 API。在响应中隐藏 "password" 字段
REST API. Hide "password" field on response
我是 C# .Net Core 的初学者。我使用 MongoDB 来存储一些对象。为了解释我的问题,假设我在“UserController”中有两种方法:注册和获取。
当我使用注册方法时,我发送用户对象(类似的东西):
{
id: 1,
email: "test@test.com",
name: "GoodUserName",
password: "12345"
}
但是当我使用 get-method 时,我想隐藏密码字段,我希望得到类似的东西(没有密码):
{
id: 1,
email: "test@test.com",
name: "GoodUserName"
}
我尝试使用 BsonIgnore,
Class User
{
...
[BsonIgnore]
string password {get; set;}
...
}
但是当我使用注册方法时,密码字段为空。
我的问题是当我使用我的“获取”控制器时,响应中的“用户”对象包含密码字段。请告诉我在响应时隐藏密码的最佳实践方法。
您的问题的简单解决方案是在检索用户时使用排除投影排除密码 属性,如下所示:
var projection = Builders<User>.Projection.Exclude(u => u.password);
var user = (await userCollection.FindAsync(
filter: u => u.id == 1,
options: new FindOptions<User, User> { Projection = projection })
).SingleOrDefaultAsync();
但是...理想情况下,您绝不会想像这样将您的数据 models/entities 暴露给您的前端。您应该使用单独的视图模型或 DTO,并在进出途中在域实体之间进行映射。查找 CQRS 模式以获得良好的实现。
我是 C# .Net Core 的初学者。我使用 MongoDB 来存储一些对象。为了解释我的问题,假设我在“UserController”中有两种方法:注册和获取。 当我使用注册方法时,我发送用户对象(类似的东西):
{
id: 1,
email: "test@test.com",
name: "GoodUserName",
password: "12345"
}
但是当我使用 get-method 时,我想隐藏密码字段,我希望得到类似的东西(没有密码):
{
id: 1,
email: "test@test.com",
name: "GoodUserName"
}
我尝试使用 BsonIgnore,
Class User
{
...
[BsonIgnore]
string password {get; set;}
...
}
但是当我使用注册方法时,密码字段为空。 我的问题是当我使用我的“获取”控制器时,响应中的“用户”对象包含密码字段。请告诉我在响应时隐藏密码的最佳实践方法。
您的问题的简单解决方案是在检索用户时使用排除投影排除密码 属性,如下所示:
var projection = Builders<User>.Projection.Exclude(u => u.password);
var user = (await userCollection.FindAsync(
filter: u => u.id == 1,
options: new FindOptions<User, User> { Projection = projection })
).SingleOrDefaultAsync();
但是...理想情况下,您绝不会想像这样将您的数据 models/entities 暴露给您的前端。您应该使用单独的视图模型或 DTO,并在进出途中在域实体之间进行映射。查找 CQRS 模式以获得良好的实现。