不使用 UserManager 来创建或更新 AspNetUsers 有缺点吗?
Is there a downside not using UserManager to create or update AspNetUsers?
网上看到的推荐方法好像都是用UserManager<TUser>.CreateAsync()
方式创建用户
仅使用 ef core dbContext 的缺点是什么?
假设我在 AspNetUsers 中有一个 TimeZoneInfoId
列。
public class ApplicationUser : IdentityUser
{
public string? TimeZoneInfoId { get; set; }
}
用dbContext更新不好吗?
例如:
using var dbContext = await DbContextFactory.CreateDbContextAsync();
var userToUpdate = await dbContext.ApplicationUsers.Where(u => u.UserName == "John").FirstOrDefaultAsync();
userToUpdate?.TimeZoneInfoId = "Samoa Standard Time";
await dbContext.SaveChangesAsync();
或者这样做完全没问题吗?
首先,UserManger是另一个抽象层次。通常它与 EF-based 用户存储一起使用,但您可以实现任何您想要的存储。
因此,如果您使用 UseManager project-wide 并且在某个开发阶段您决定要将当前 EF-based 用户存储切换到其他内容,唯一要做的就是替换 IUserStore
在你的 UserManager
中。如果你按照你提供的方式(直接调用 db) - 你应该重构你管理用户的每个地方。
用户管理器关心更多的事情,例如:更新安全标记/规范化或验证 - 知道这一点非常重要,您可以修改 UserManager
的每个方面 - 您唯一需要做的事情要做的是将 UserManager
抽象切换到另一个抽象 - 就像 IUserStore
.
的情况一样
总而言之,UserManager
工作就像许多组件的好粘合剂,让您可以管理用户。默认情况下,它使用良好的默认实现,但您可以根据需要轻松调整它。
这里解释一下为什么我们选择使用 UserManager
和 RoleManager
。
ASP.NET Core Identity:
Is an API that supports user interface (UI) login functionality.
Manages users, passwords, profile data, roles, claims, tokens, email
confirmation, and more.
这不仅仅是数据库访问。它还是管理登录功能、安全令牌创建、安全密码管理等的代码。
如果你创建一个自定义系统,你需要考虑以上所有因素,有一个外部审计员来pen-test你的解决方案(尽管无论你做出什么选择,这都是一个好主意),单元测试、性能测试等
以上都已经完成了。您也可以使用各种挂钩点轻松自定义身份。
顺便说一句,默认情况下身份已经使用 ef 访问数据存储。
构建您的多层应用程序,但将身份排除在外。这是一个横向关注点,它的存在是为了简化您的开发,让您只担心您的业务需求。
在代码中定义bad
非常困难,但userManager
为开发者提供了更方便、高效、安全的选择。
参考
网上看到的推荐方法好像都是用UserManager<TUser>.CreateAsync()
方式创建用户
仅使用 ef core dbContext 的缺点是什么?
假设我在 AspNetUsers 中有一个 TimeZoneInfoId
列。
public class ApplicationUser : IdentityUser
{
public string? TimeZoneInfoId { get; set; }
}
用dbContext更新不好吗?
例如:
using var dbContext = await DbContextFactory.CreateDbContextAsync();
var userToUpdate = await dbContext.ApplicationUsers.Where(u => u.UserName == "John").FirstOrDefaultAsync();
userToUpdate?.TimeZoneInfoId = "Samoa Standard Time";
await dbContext.SaveChangesAsync();
或者这样做完全没问题吗?
首先,UserManger是另一个抽象层次。通常它与 EF-based 用户存储一起使用,但您可以实现任何您想要的存储。
因此,如果您使用 UseManager project-wide 并且在某个开发阶段您决定要将当前 EF-based 用户存储切换到其他内容,唯一要做的就是替换 IUserStore
在你的 UserManager
中。如果你按照你提供的方式(直接调用 db) - 你应该重构你管理用户的每个地方。
用户管理器关心更多的事情,例如:更新安全标记/规范化或验证 - 知道这一点非常重要,您可以修改 UserManager
的每个方面 - 您唯一需要做的事情要做的是将 UserManager
抽象切换到另一个抽象 - 就像 IUserStore
.
总而言之,UserManager
工作就像许多组件的好粘合剂,让您可以管理用户。默认情况下,它使用良好的默认实现,但您可以根据需要轻松调整它。
这里解释一下为什么我们选择使用 UserManager
和 RoleManager
。
ASP.NET Core Identity:
Is an API that supports user interface (UI) login functionality.
Manages users, passwords, profile data, roles, claims, tokens, email confirmation, and more.
这不仅仅是数据库访问。它还是管理登录功能、安全令牌创建、安全密码管理等的代码。
如果你创建一个自定义系统,你需要考虑以上所有因素,有一个外部审计员来pen-test你的解决方案(尽管无论你做出什么选择,这都是一个好主意),单元测试、性能测试等
以上都已经完成了。您也可以使用各种挂钩点轻松自定义身份。
顺便说一句,默认情况下身份已经使用 ef 访问数据存储。
构建您的多层应用程序,但将身份排除在外。这是一个横向关注点,它的存在是为了简化您的开发,让您只担心您的业务需求。
在代码中定义bad
非常困难,但userManager
为开发者提供了更方便、高效、安全的选择。
参考