我想在经过身份验证的用户中存储额外的信息,以便我可以轻松访问它(例如User.Identity.Id),而不仅仅是名称,因为我计划让它具有非唯一性.
到目前为止,我已经收集到了我应该寻求实现自定义Principal和/或Identity,但我不确定如何去实现它.我一直在寻找有关此事的文档和教程,但我在不同的地方找到了相关的东西,我发现它有点令人困惑.
我已经看到了如何将自定义信息添加到用户数据属性中的身份验证cookie,但我希望获得单元测试的依赖注入的好处,我可以使用主体和身份.
如果我想实现自己的Principal或Identity,我需要考虑哪些确切的步骤?
在这种情况下我能做的最简单的事情是什么(只需添加ID并保留所有默认值)?"默认值"将包括默认提供者(成员资格,角色等).
我已经看到了另一个问题,但我很欣赏不会在两者之间留下任何漏洞的答案,例如示例中AuthenticateRequest事件中的角色魔术字符串.相反,我需要知道如何将默认SqlRoleProvider中的角色添加到当前用户:何时何地执行此操作,以及是否需要执行任何其他操作以将新类与其他默认提供程序连接.
能够转到示例ASP.NET MVC 2应用程序(例如,来自visual studio 2010模板),进行编辑并使其工作是非常棒的.
编辑:我已经编辑了这个问题,以便更好地表明我在这里已经失去了很多,所以我无法用太高的答案来做.
PS:在我看来,在身份而不是校长中使用ID会更有意义,尽管我在某种程度上已经说过这个.
我转而使用新的ASP.NET Identity 2.我实际上使用的是Microsoft ASP.NET Identity Samples 2.0.0-beta2.
任何人都可以告诉我在哪里以及如何修改代码,以便它存储用户的名字和姓氏以及用户详细信息.这现在是否是索赔的一部分,如果是,我怎么能添加它?
我假设我需要在这里添加这个帐户控制器中的寄存器方法:
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
ViewBag.Link = callbackUrl;
return View("DisplayEmail");
} …Run Code Online (Sandbox Code Playgroud)