- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编辑 UserManager
类以添加一些方法,例如 ChangeEmailAsync
(ChangePasswordAsync
的克隆)我是 C# 和 . NET
因为我曾经在 java 中工作,所以我正在阅读 Microsoft 网站上的入门书并练习一些表格。
我看到一行代码:
IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
我想查看 UserManager
中的代码来复制 ChangePassword
并创建 ChangeEmail
,并了解创建一些方法(更改其他字段)的过程等)
我使用 F12 导航到 UserManager
,我看到它是一个接口(interface)(或者看起来像 java 接口(interface))
#region Ensamblado Microsoft.AspNet.Identity.Core.dll, v1.0.0.0
// C:\Users\User\Documents\Visual Studio 2013\Projects\MTGWeb\packages\Microsoft.AspNet.Identity.Core.1.0.0\lib\net45\Microsoft.AspNet.Identity.Core.dll
#endregion
using System;
using System.Diagnostics;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Microsoft.AspNet.Identity
{
public class UserManager<TUser> : IDisposable where TUser : global::Microsoft.AspNet.Identity.IUser
{
public UserManager(IUserStore<TUser> store);
public ClaimsIdentityFactory<TUser> ClaimsIdentityFactory { get; set; }
public IPasswordHasher PasswordHasher { get; set; }
public IIdentityValidator<string> PasswordValidator { get; set; }
protected IUserStore<TUser> Store { get; }
public virtual bool SupportsUserClaim { get; }
public virtual bool SupportsUserLogin { get; }
public virtual bool SupportsUserPassword { get; }
public virtual bool SupportsUserRole { get; }
public virtual bool SupportsUserSecurityStamp { get; }
public IIdentityValidator<TUser> UserValidator { get; set; }
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddClaimAsync(string userId, Claim claim);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddLoginAsync(string userId, UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddPasswordAsync(string userId, string password);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddToRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> ChangePasswordAsync(string userId, string currentPassword, string newPassword);
[DebuggerStepThrough]
public virtual Task<IdentityResult> CreateAsync(TUser user);
[DebuggerStepThrough]
public virtual Task<IdentityResult> CreateAsync(TUser user, string password);
public virtual Task<ClaimsIdentity> CreateIdentityAsync(TUser user, string authenticationType);
public void Dispose();
protected virtual void Dispose(bool disposing);
public virtual Task<TUser> FindAsync(UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<TUser> FindAsync(string userName, string password);
[DebuggerStepThrough]
public virtual Task<TUser> FindByIdAsync(string userId);
[DebuggerStepThrough]
public virtual Task<TUser> FindByNameAsync(string userName);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<Claim>> GetClaimsAsync(string userId);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<UserLoginInfo>> GetLoginsAsync(string userId);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<string>> GetRolesAsync(string userId);
[DebuggerStepThrough]
public virtual Task<bool> HasPasswordAsync(string userId);
[DebuggerStepThrough]
public virtual Task<bool> IsInRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveClaimAsync(string userId, Claim claim);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveFromRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveLoginAsync(string userId, UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemovePasswordAsync(string userId);
[DebuggerStepThrough]
public virtual Task<IdentityResult> UpdateAsync(TUser user);
[DebuggerStepThrough]
public virtual Task<IdentityResult> UpdateSecurityStampAsync(string userId);
}
}
I can implement this? And I can see the code of the methods.
#region Ensamblado Microsoft.AspNet.Identity.Core.dll, v1.0.0.0
// C:\Users\User\Documents\Visual Studio 2013\Projects\MTGWeb\packages\Microsoft.AspNet.Identity.Core.1.0.0\lib\net45\Microsoft.AspNet.Identity.Core.dll
#endregion
using System;
using System.Diagnostics;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Microsoft.AspNet.Identity
{
public class UserManager<TUser> : IDisposable where TUser : global::Microsoft.AspNet.Identity.IUser
{
public UserManager(IUserStore<TUser> store);
public ClaimsIdentityFactory<TUser> ClaimsIdentityFactory { get; set; }
public IPasswordHasher PasswordHasher { get; set; }
public IIdentityValidator<string> PasswordValidator { get; set; }
protected IUserStore<TUser> Store { get; }
public virtual bool SupportsUserClaim { get; }
public virtual bool SupportsUserLogin { get; }
public virtual bool SupportsUserPassword { get; }
public virtual bool SupportsUserRole { get; }
public virtual bool SupportsUserSecurityStamp { get; }
public IIdentityValidator<TUser> UserValidator { get; set; }
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddClaimAsync(string userId, Claim claim);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddLoginAsync(string userId, UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddPasswordAsync(string userId, string password);
[DebuggerStepThrough]
public virtual Task<IdentityResult> AddToRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> ChangePasswordAsync(string userId, string currentPassword, string newPassword);
[DebuggerStepThrough]
public virtual Task<IdentityResult> CreateAsync(TUser user);
[DebuggerStepThrough]
public virtual Task<IdentityResult> CreateAsync(TUser user, string password);
public virtual Task<ClaimsIdentity> CreateIdentityAsync(TUser user, string authenticationType);
public void Dispose();
protected virtual void Dispose(bool disposing);
public virtual Task<TUser> FindAsync(UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<TUser> FindAsync(string userName, string password);
[DebuggerStepThrough]
public virtual Task<TUser> FindByIdAsync(string userId);
[DebuggerStepThrough]
public virtual Task<TUser> FindByNameAsync(string userName);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<Claim>> GetClaimsAsync(string userId);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<UserLoginInfo>> GetLoginsAsync(string userId);
[DebuggerStepThrough]
public virtual Task<System.Collections.Generic.IList<string>> GetRolesAsync(string userId);
[DebuggerStepThrough]
public virtual Task<bool> HasPasswordAsync(string userId);
[DebuggerStepThrough]
public virtual Task<bool> IsInRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveClaimAsync(string userId, Claim claim);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveFromRoleAsync(string userId, string role);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemoveLoginAsync(string userId, UserLoginInfo login);
[DebuggerStepThrough]
public virtual Task<IdentityResult> RemovePasswordAsync(string userId);
[DebuggerStepThrough]
public virtual Task<IdentityResult> UpdateAsync(TUser user);
[DebuggerStepThrough]
public virtual Task<IdentityResult> UpdateSecurityStampAsync(string userId);
}
}
非常感谢您的帮助,对不起我的英语
最佳答案
您不能直接向此类添加新方法,因为它来自另一个程序集。我明白您为什么将其称为接口(interface),但是从另一个程序集导航到一个类实际上只会向您显示该类的构造函数、属性和公共(public)方法的不同签名。你不能改变这些。
要更改用户的属性,您应该在 UserManager 上使用 UpdateAsync(TUser user)
方法,也许像这样(在您的 Controller 中):
[HttpPost]
public async Task<ActionResult> ChangeEmail(string newEmail)
{
var user = await UserManager.FindByNameAsync(User.Identity.Name);
user.Email = newEmail;
UserManager.UpdateAsync(user);
return View();
}
关于java - ASP MVC5 UserManager 添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021756/
我使用以下代码来更改用户的密码: UserManager userManager = new UserManager(new UserStore(new ApplicationDbContext())
我正在尝试实现 Asp.Net Identity 2.0。到目前为止,我在 this blog 的帮助下管理得很好.但我走了一条稍微不同的路。我希望某些数据不属于 User 对象,而是属于新创建的 C
这个问题在这里已经有了答案: How would I run an async Task method synchronously? (25 个回答) 3个月前关闭。 在我的其中之一 IDatabas
我必须为我的单元测试创建 owin 环境,这是创建 Usermanager 对象所必需的。在我目前的情况下,我的 usermanager 为空,因为它没有获取 owincontext。 这是我访问
我有以下代码: var clientId = this.UserManager.FindById(this.User.Identity.GetUserId()).ClientId; 它是我应用程序中
我有一个问题,当我创建用户时,它没有初始化 list<> 类型的属性 - 我收到以下错误: An unhandled exception occurred while processing the r
我有一个应用程序使用 Microsoft.AspNetCore.Identity.UserManager 来管理用户。我使用核心 2.2。 UserManager 是通过我的服务中的内置依赖项注入(i
使用 ASP.NET Core 2。 我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为 DbInitializer 的新类。 ,一个名为 IDbInitializer 的接口(inter
我的应用程序的所有身份验证和授权过程都是使用存储过程完成的。我已经编写了一个包含我需要的所有功能的类,例如GetUsers、Login、AddRole、AddMember 等。此外,用于管理用户、角色
UserManager.FindAsync 总能找到匹配项,即使我输入了错误的用户名和密码,它也总是会返回某种用户 ID。 [HttpPost] public ActionResult Mobilel
ASPNET Identity 中的 UserManager 包含 AddPasswordAsync 和 SetPhoneNumberAsync 等函数。 我已经为 FirstName 和 LastN
背景 我正在使用 .Net Core API 来驱动歌词应用程序。用户可以注册、提交艺术家和歌词,并在此过程中获得荣誉/XP 积分。基本上是一个社区驱动的歌词网站。 代码 这是我的 ArtistCon
所以我创建了这个继承自 UserManager 的用户服务,它看起来像这样: /// /// Service for handling users /// public class UserSer
我想做的是添加一个新的管理员用户并为其分配管理员角色。所以..我转到 Configure 方法中的 Startup.cs 类并编写了以下代码: var context = app.Applicatio
我有一个带有自定义电子邮件服务的自定义用户管理器。我在 AccountController 中调用 UserManager.SendEmailAsync() 方法,它只是挂起。我什至尝试将它与无效的
Android 7.1 UserManager类中出现的这个新方法描述here Checks if the calling app is running in a demo user. When ru
我正在使用 FOSUserBundle 并创建了一个自己的模型,其中包含一些新字段(例如 deviceVersion ( string ) 和 deviceType ( string )。 如果我创建
尝试使用 UserManager CreateAsync 方法创建新用户时出现以下错误。我使用的是未修改的 IdentityUser 和 IdentityRole。我有一些 DBSets,它们填充了数
我有一些服务负责在使用 UserManager 时更改用户密码并且一切正常,但是当我想编写一些测试时,它开始在方法 CheckPassword,它主要检查 current (old password)
如何在 ASP.NET Identity 中模拟 UserManager.GetRoles()?我知道它是一个扩展方法,所以我不能直接模拟它,也找不到需要模拟的底层方法/属性。 过去,我能够通过模拟
我是一名优秀的程序员,十分优秀!