【发布时间】:2015-04-14 13:36:21
【问题描述】:
我正在尝试一些非常奇特的东西,我相信我正面临一些问题,我希望可以在 StackOverflow 上的用户的帮助下解决这些问题。
故事
我正在编写需要身份验证和注册的应用程序。我选择使用Microsoft.AspNet.Identity。我过去没有经常使用它,所以请不要以此决定评判我。
上面提到的框架包含一个 users 表,其中包含所有注册用户。
我创建了一张示例图片来展示应用程序的工作方式。
该应用程序由 3 个不同的组件组成:
- 后端 (WebAPI)。
- 客户(直接使用 WebAPI)。
- 最终用户(使用移动应用 - iOS)。
所以,我确实有一个客户可以注册的后端。每个成员有一个唯一用户,所以这里没有问题。 此处的客户是一家公司,而最终用户是该公司的客户。
您可能已经看到了问题,User 1 很可能是Customer 1 的客户,但也可能是Customer 2 的客户。
现在,客户可以邀请会员使用移动应用程序。当客户这样做时,最终用户确实会收到一封电子邮件,其中包含指向活动自己的链接。
现在,只要您的用户是唯一的,这一切都可以正常工作,但我确实有一个用户是 Customer 1 和 Customer 2 的客户。两个客户都可以邀请同一个用户,用户需要注册2次,每个Customer一个。
问题
在Microsoft.AspNet.Identity框架中,用户应该是唯一的,根据我的情况,我无法管理。
问题
是否可以向IdentityUser 添加额外参数以确保用户是唯一的?
我已经做了什么
-
创建一个继承自
IdentityUser并包含应用程序 ID 的自定义类:public class AppServerUser : IdentityUser { #region Properties /// <summary> /// Gets or sets the id of the member that this user belongs to. /// </summary> public int MemberId { get; set; } #endregion } -
相应地更改了我的
IDbContext:public class AppServerContext : IdentityDbContext<AppServerUser>, IDbContext { } -
使用框架的修改调用。
IUserStore<IdentityUser> -> IUserStore<AppServerUser> UserManager<IdentityUser>(_userStore) -> UserManager<AppServerUser>(_userStore);_userStore偏离IUserStore<AppServerUser>类型
但是,当我使用已被占用的用户名注册用户时,我仍然会收到一条错误消息,指出该用户名已被占用:
var result = await userManager.CreateAsync(new AppServerUser {UserName = "testing"}, "testing");
我确实认为是一个解决方案
我确实认为我需要更改UserManager,但我不确定。
我确实希望这里有人对框架有足够的了解来帮助我,因为它确实阻碍了我们的应用程序开发。
如果不可能,我也想知道,也许您可以向我指出另一个允许我这样做的框架。
注意:我不想自己编写一个完整的用户管理,因为那样会重新发明轮子。
【问题讨论】:
-
仅供参考,这称为“多租户”。这是网站中的一个常见概念,也是一个众所周知的问题。您会在此处使用 Identity Framework 找到很多关于此的问题。
-
我不清楚您是要为每个客户/用户单独记录不同的记录,还是要为多个客户提供一个用户。
-
用户表中需要有 2 条用户记录,但两条记录的用户名和密码相同。将有另一个字段唯一标识一条记录。
-
您可能会发现这很有用stackoverflow.com/questions/20037145/…
-
@ErikFunkenbusch 感谢您提供非常有用的帖子。
标签: c# asp.net authentication forms-authentication asp.net-identity