我正在研究Android 4.2中引入的新API .在看UserManager课时,我遇到了以下方法:
Run Code Online (Sandbox Code Playgroud)public boolean isUserAGoat()用于确定进行此呼叫的用户是否受传送的影响.
返回进行此调用的用户是否为山羊.
应该如何以及何时使用?
我想知道如果有一种方法与重置密码UserManager的ASP.NET MVC 5
我尝试使用已经有密码但没有成功的用户.任何线索?
IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
//
}
else
{
AddErrors(result);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用ASP.NET Identity 2.2.我正在将ASP.NET旧成员资格迁移到新的Identity系统.我按照本文中提到的步骤执行迁移.
我已经扩展IdentityUser并添加了更多的属性,如下所示:
public partial class AspNetUser : IdentityUser
{
public AspNetUser()
{
CreateDate = DateTime.Now;
IsApproved = false;
LastLoginDate = DateTime.Now;
LastActivityDate = DateTime.Now;
LastPasswordChangedDate = DateTime.Now;
LastLockoutDate = DateTime.Parse("1/1/1754");
FailedPasswordAnswerAttemptWindowStart = DateTime.Parse("1/1/1754");
FailedPasswordAttemptWindowStart = DateTime.Parse("1/1/1754");
Discriminator = "AspNetUser";
LastModified = DateTime.Now;
this.AspNetUserClaims = new HashSet<AspNetUserClaim>();
this.AspNetUserLogins = new HashSet<AspNetUserLogin>();
this.AspNetRoles = new HashSet<AspNetRole>();
}
....
public virtual Application Application { get; set; }
public virtual ICollection<AspNetUserClaim> AspNetUserClaims { get; set; }
public virtual …Run Code Online (Sandbox Code Playgroud) c# entity-framework claims-based-identity asp.net-identity usermanager
如何auth_user在django中为该类使用自定义管理器?
在我的django项目中,我正在使用auth_user,我有一个基本的个人资料类.在我网站的每个页面中,我都使用了一些用户和个人资料数据,因此每个用户查询都应该加入个人资料.
我想在自定义管理器中使用select_related该get_query_set()方法,但我找不到任何正确的方法来定义一个,或覆盖现有的UserManager.有任何想法吗?
注意:我不想覆盖用户模型.或者,更确切地说,我已经在不同的代理模型中覆盖了它.我希望在每个代理模型中使用此自定义管理器.
我正在尝试为我的帐户控制器web apis编写一些单元测试,这些测试使用UserManager,但我在以下部分的标题中继续接收null:
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多不同的方法来解决这个问题,因为我已经读过我需要模拟ApplicationUser的一些部分但是没有设法让它们中的任何一个来解决我的问题.下面是我在单元测试教程后实现的一些代码:
public interface IStoreAppContext : IDisposable
{
//IDbSet<User> Users { get; }
DbSet<User> u { get; }
DbSet<SportProgram> SportContext { get; set; }
int SaveChanges();
void MarkAsModified(User item);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在我的帐户控制器中进行单元测试的api是:(这行下面的"var user ..."是问题开始的地方.它调用此问题标题中的行)
[Route("userProfile/{username}")]
public IHttpActionResult getUserProfile(String username)
{
var user = UserManager.FindByName(username);
if (user != null)
{
db2.MarkAsModified(user);
return Ok(user);
}
else
{
return NotFound();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的TestProject中,我有以下上下文类: …
环境:.Net Core 1,EF,使用Identity进行身份验证,使用JWT令牌进行授权.
遇到问题,使用UserManager.ChangePasswordAsync()方法IS正确更新数据库,但不更新UserManager.Users列表(假设).
在Startup.cs中,我们只是使用app.UseIdentity(),在ApplicationUserService构造函数中,我们正在注入UserManager<ApplicationUser>.除此之外,我们没有做任何习惯.
例如:假设用户将其密码从"password1"更改为"password2".如果该用户注销并重新登录,则UserManager仍认为密码为"password1".如果我重新启动WebAPI服务器,则尝试登录; 它可以像你期望的那样使用"password2".所以它肯定会更新数据库,但UserManager的范围/缓存没有更新.
我想知道UserManager的默认DI范围是否是单例(而不是每个请求)?如果它没有更新UserStore的缓存用户列表,我可以看到导致此问题.
有什么建议?需要更多代码?
ApplicationUserService(简化):
private readonly UserManager<ApplicationUser> _userManager;
public ApplicationUserService(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public Task<IdentityResult> ChangePasswordAsync(ApplicationUser user, string currentPassword, string newPassword)
{
return _userManager.ChangePasswordAsync(user, currentPassword, newPassword);
}
Run Code Online (Sandbox Code Playgroud)
[编辑]
我不确定为什么会出现这种情况,但我刚才意识到,如果我将UserManager和SignInManager直接注入到Controller的构造函数中(而不是注入Service层),它似乎工作得很好.
[编辑2]
调查结果摘要:
1)将UserManager和SignInManager注入到Service构造函数中,然后将该Service注入Controller构造函数不起作用.
2)将UserManager和SignInManager注入Controller构造函数.
3)我还在Controller构造函数中测试了IServiceProvider的使用.我注入了IServiceProvider,然后使用GetService方法设置管理器:_userManager = serviceProvider.GetService<UserManager<ApplicationUser>>();.这与#1的结果相同.
在#1和#3中:它将保存到数据库,但管理员似乎在以后使用时不知道数据更改.在这两种情况下,我都必须重新初始化应用程序(停止并启动服务器),以便更新缓存的数据.
不应该#3和#2一样工作吗?
我目前正在使用 RoleManager 和 CreateAsync(newRoleName) 方法将角色添加到我们的数据库 - 该方法工作正常。但是当我尝试查询该角色时,它总是返回它不存在(即使我可以在数据库中看到它)。
谁能提供一些有关我无法使用该角色的原因的见解?
var roleExists = roleManager.RoleExistsAsync(role);
if (!roleExists.Result)
{
var newRole = new IdentityRole(role)
{
Name = role,
NormalizedName = role.ToUpper(),
};
var roleCreated = roleManager.CreateAsync(newRole);
Thread.Sleep(500); // Used to get result back first.
var roleExistsYet = roleManager.RoleExistsAsync(role);
if (!roleExists.Result)
{
// ALWAYS Returns [False]
}
}
Run Code Online (Sandbox Code Playgroud)
最初的问题出现在我们用UserManager创建一个新的User的时候,下面的方法会导致错误
var roleAddResult = userManager.AddToRoleAsync(newUser, "TestRole123");
Run Code Online (Sandbox Code Playgroud)
异常错误:角色 [TESTROLE123] 不存在。
注意:我可以在表 dbo.AspNetRoles 的数据库中看到角色“TestRole123”(或任何其他角色)的条目。
任何见解或帮助表示赞赏。
环境:Visual Studio 2017、Asp.NET Core、C#
我使用 ASP.NET Core 2.2 作为 Web 服务器,每次用户登录网站时,在输入正确的电子邮件和密码后,我需要向用户电子邮件发送一条包含4 位 PIN 码的消息,以使用它作为电子邮件双重身份验证,以及此 PIN 码,应在发送后 10 分钟后过期。
我可以手动执行此操作(生成随机 PIN 码,将它们保存在数据库中,使用 if 语句验证它们等...),这会起作用,但我创建了这个问题来询问如何使用可用的 ASP.NET Core 2 执行此操作功能(可以为我节省数据库表)。
我尝试了UserManager.GenerateTwoFactorTokenAsync(TUser, String) Method,生成一个令牌并将其发送到电子邮件:
var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Default");
SendLoginTokenToUserEmail(user, token);
Run Code Online (Sandbox Code Playgroud)
并使用UserManager.VerifyTwoFactorTokenAsync(TUser, String, String)来验证它:
var verified = await _userManager.VerifyTwoFactorTokenAsync(user, "Default", token);
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我的问题是生成的令牌不是 4 位 PIN 码,其过期时间不是 10 分钟(我认为默认值为 1 天)。
所以,我的问题是:如何在 ASP.NET Core 2.2 中为双因素身份验证自定义 UserManager 生成的令牌?
这可以通过创建自定义令牌提供程序来完成吗?(我在这里使用默认令牌提供程序)如果是这样,这样做的步骤是什么?我花了几个小时浏览 Docs 和 ASP.NET Core 2 文章,但没有找到我需要的。 …
authentication two-factor-authentication usermanager asp.net-core-2.2
我有一个自定义用户角色类CompanyId作为外键。所以我可以创建与公司相关的用户角色。这意味着管理员角色或任何其他角色本身可以在多个公司中担任。我无法与公司和角色建立多对多关系,因为一家公司的管理员声明可能因另一家公司而异。所以我在用户角色实体中添加了公司 ID。
我的问题是,用户管理器将角色名称作为参数AddToRoleAsync(),我无法使用它,因为角色名称可能是多余的。如果我能够通过 Id 添加用户角色,那就太好了。有解决方法可以实现这一目标吗?
我当前的解决方法是将公司名称添加为角色名称的前缀。喜欢:ABC - 管理员;XYZ - 管理员。我不太喜欢这个,用户也不会。
如果我可以为两者创建一个重载方法AddToRoleAsync(),并IsInRoleAync()通过其 ID 而不是名称来查找角色,那就太好了。
我正在尝试更新用户.
AppUserManager appUserManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
AppUser member = await appUserManager.FindByIdAsync(User.Identity.GetUserId());
member.HasScheduledChanges = true;
IdentityResult identityResult = appUserManager.Update(member);
Run Code Online (Sandbox Code Playgroud)
如果后续调用Web API失败,我需要回滚对用户的任何更改.我知道交易,像这样:
using (var context = HttpContext.GetOwinContext().Get<EFDbContext>())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
// Changes
member.HasScheduledChanges = true;
// Would this be transactional?
IdentityResult identityResult = appUserManager.Update(member);
context.SaveChanges();
dbContextTransaction.Commit();
}
catch //(Exception ex)
{
// dbContextTransaction.Rollback(); no need to call this manually.
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在try块中使用AppUserManager进行的操作是否是事务性的?另外,他们使用相同的EFDbContext实例吗?换句话说,我不知道第二个代码示例开头的var context是否会被try块中的appUserManager"Update"方法调用使用.
此外,AppUserManager的创建方式如下:
public static AppUserManager Create(IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
EFDbContext db = context.Get<EFDbContext>(); …Run Code Online (Sandbox Code Playgroud) usermanager ×10
c# ×6
asp.net ×2
asp.net-core ×2
android ×1
django ×1
identity ×1
java ×1
passwords ×1
role-manager ×1
roles ×1
transactions ×1
unit-testing ×1