【问题标题】:Identity Sever 4 - Users to change their Username/EmailIdentity Server 4 - 用户更改其用户名/电子邮件
【发布时间】:2020-06-21 13:37:34
【问题描述】:
我需要让用户在登录后能够更改其帐户上的用户名/电子邮件地址(相同的值)......也许与更改密码的方式类似。我查看了 IdentityServer4 文档,但没有提到这一点……系统正在使用 ASP.net Identity 来存储用户数据。
IdentityServer4 是否有“开箱即用”选项来更改用户名? (因为它不在我认为不在的文档中)
任何人都可以提出任何已经完成的例子吗?搜索时,令人惊讶的是,这方面的信息很少。
如果没有示例,谁能建议从哪里开始?
【问题讨论】:
-
来自documentation:提供了一个基于 ASP.NET 身份的实现,用于管理 IdentityServer 用户的身份数据库。此实现在 IdentityServer 中实现了为您的用户加载身份数据以向令牌发出声明所需的扩展点。 这就是 IdentityServer4 所能做到的。对于 Asp.Net Identity,您可以查看 Microsoft documentation。
标签:
identityserver4
asp.net-identity-2
【解决方案1】:
如果您在 IS4 中使用 Asp.Net Identity,则更新用户名/电子邮件将通过 Asp.Net Identity 方法完成。具体来说,这是通过 UserManager 使用两种方法完成的,SetUserNameAsync() 和 SetEmailAsync()。假设您已经有一个 UserManager 的实例(使用 DI 很常见),代码将如下所示:
// First get the user, in this example, by ID but also you can use FindByEmailAsync()
var identityUser = await _userManager.FindByIdAsync(id.ToString());
// Change the Username field
var usernameResult = await _userManager.SetUserNameAsync(identityUser, user.Email);
// Change the email field
var emailResult = await _userManager.SetEmailAsync(identityUser, user.Email);
然后您可以检查 usernameResult.Succeeded 和 emailResult.Succeeded 布尔值以获取操作结果。
您可以随心所欲地实现它。就我而言,我在运行此代码的 IdentityServer4 实例(也受 IS4 本身保护)上创建了一个单独的“用户管理”API 端点。如果您对类似选项感兴趣,请查看 IS4 上有关创建自己的端点的文档:http://docs.identityserver.io/en/latest/topics/add_apis.html