标签: usermanager

适用于Android UserManager.isUserAGoat()的用例?

我正在研究Android 4.2中引入的新API .在看UserManager课时,我遇到了以下方法:

public boolean isUserAGoat()
Run Code Online (Sandbox Code Playgroud)

用于确定进行此呼叫的用户是否受传送的影响.

返回进行此调用的用户是否为山羊.

应该如何以及何时使用?

java android usermanager

3506
推荐指数
12
解决办法
30万
查看次数

如何使用ASP.NET MVC 5的UserManager重置密码

我想知道如果有一种方法与重置密码UserManagerASP.NET MVC 5

我尝试使用已经有密码但没有成功的用户.任何线索?

IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
       //
}
else
{
        AddErrors(result);
}
Run Code Online (Sandbox Code Playgroud)

c# passwords reset-password asp.net-mvc-5 usermanager

41
推荐指数
4
解决办法
7万
查看次数

'AspNetUser'类型的属性'Claims'不是导航属性

我正在使用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

12
推荐指数
1
解决办法
2363
查看次数

在django中覆盖UserManager

如何auth_user在django中为该类使用自定义管理器?

在我的django项目中,我正在使用auth_user,我有一个基本的个人资料类.在我网站的每个页面中,我都使用了一些用户和个人资料数据,因此每个用户查询都应该加入个人资料.

我想在自定义管理器中使用select_relatedget_query_set()方法,但我找不到任何正确的方法来定义一个,或覆盖现有的UserManager.有任何想法吗?

注意:我不想覆盖用户模型.或者,更确切地说,我已经在不同的代理模型中覆盖了它.我希望在每个代理模型中使用此自定义管理器.

authentication django usermanager

9
推荐指数
1
解决办法
3412
查看次数

Request.GetOwinContext().getManager <ApplicationUserManager>在单元测试帐户控制器web api时返回null

我正在尝试为我的帐户控制器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中,我有以下上下文类: …

unit-testing asp.net-web-api usermanager

5
推荐指数
0
解决办法
755
查看次数

.Net Core 1 Identity UserManager缓存的用户列表未更新

环境:.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一样工作吗?

c# identity usermanager asp.net-core

5
推荐指数
1
解决办法
855
查看次数

尝试将角色添加到用户时,Asp.NET 身份角色不起作用

我目前正在使用 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#

c# asp.net roles asp.net-identity usermanager

5
推荐指数
1
解决办法
6437
查看次数

如何在 ASP.Net Core 2 中通过电子邮件实现两因素身份验证?

我使用 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

5
推荐指数
1
解决办法
1223
查看次数

ASP.NET Core Identity userManager.AddToRoleAsync() - 按 id 添加

我有一个自定义用户角色类CompanyId作为外键。所以我可以创建与公司相关的用户角色。这意味着管理员角色或任何其他角色本身可以在多个公司中担任。我无法与公司和角色建立多对多关系,因为一家公司的管理员声明可能因另一家公司而异。所以我在用户角色实体中添加了公司 ID。

我的问题是,用户管理器将角色名称作为参数AddToRoleAsync(),我无法使用它,因为角色名称可能是多余的。如果我能够通过 Id 添加用户角色,那就太好了。有解决方法可以实现这一目标吗?

我当前的解决方法是将公司名称添加为角色名称的前缀。喜欢:ABC - 管理员;XYZ - 管理员。我不太喜欢这个,用户也不会。

如果我可以为两者创建一个重载方法AddToRoleAsync(),并IsInRoleAync()通过其 ID 而不是名称来查找角色,那就太好了。

c# asp.net-identity role-manager usermanager asp.net-core

5
推荐指数
1
解决办法
2008
查看次数

使用ASP.NET Identity UserManager进行事务

我正在尝试更新用户.

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)

c# asp.net transactions asp.net-identity usermanager

4
推荐指数
2
解决办法
6351
查看次数