- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经实现了自定义 UserStore
, 它实现了 IUserStore<DatabaseLogin, int>
和 IUserPasswordStore<DatabaseLogin, int>
.
我的登录操作方法如下:
if (ModelState.IsValid)
{
if (Authentication.Login(user.Username, user.Password))
{
DatabaseLogin x = await UserManager.FindAsync(user.Username, user.Password);
DatabaseLogin Login = Authentication.FindByName(user.Username);
if (Login != null)
{
ClaimsIdentity ident = await UserManager.CreateIdentityAsync(Login,
DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignOut();
AuthManager.SignIn(new AuthenticationProperties
{
IsPersistent = false
}, ident);
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid Login");
}
}
return View();
在我编写的自定义身份验证类中,Authentication
,我有一个工作正常的登录方法,也是 FindByName
方法返回一个应用程序用户。但是如果我尝试 SignIn
使用该登录名,用户未被识别为经过身份验证并且 HttpContext.User.Identity
总是空的,所以我想我必须尝试 UserManager.FindAsync
.
此方法调用 FindByNameAsync
和 GetPasswordHashAsync
, 它总是返回 null。
public Task<DatabaseLogin> FindByNameAsync(string userName)
{
if (string.IsNullOrEmpty(userName))
throw new ArgumentNullException("userName");
return Task.FromResult<DatabaseLogin>(Authentication.FindByName(userName));
}
public Task<string> GetPasswordHashAsync(DatabaseLogin user)
{
if (user == null)
throw new ArgumentNullException("user");
return Task.FromResult<string>(user.Password);
}
还有 Authentication.FindByName
public static DatabaseLogin FindByName(string name)
{
string GetUserQuery = string.Format(
"USE db;SELECT principal_id AS id, name as userName, create_date AS CreateDate, modify_date AS modifyDate FROM sys.database_principals WHERE type='S' AND authentication_type = 1 AND name = '{0}'"
, name);
DatabaseLogin user;
using (var db = new EFDbContext())
{
user = db.Database.SqlQuery<DatabaseLogin>(GetUserQuery).FirstOrDefault();
}
user.Password = Convert.ToBase64String(Encoding.ASCII.GetBytes("pass"));
return user;
}
如您所见,我正在使用数据库用户,我不确定如何为他们检索散列密码。现在,我只是存储正确密码的 Base65!
我不知道我哪里出错了,欢迎任何指导。
最佳答案
简短回答:没有问题。用户在其他操作方法中进行了身份验证,但显然不是在当前操作方法中。
这是我遵循的过程,也许它会帮助您调试您的应用。
看完source code , FindAsync
第一个电话 FindByNameAsync
, 其次是 CheckPasswordAsync
其中引用 VerifyPasswordAsync
.所以应该没问题如果我可以覆盖 VerifyPasswordAsync
.
我创建了一个自定义 password hasher
实现 IPasswordHasher
, 并将其注册在 create
中我的方法UserManager
像这样:
manager.PasswordHasher = new DbPasswordHasher();
现在,我可以从 UserManager.FindAsync
获取我的用户,但事实证明,自 HttpContext.User.Identity
以来,从哪里获得用户并不重要。仍然是空的!我的错误是我没有注意到用户在当前操作中未通过身份验证,在其他操作方法中它按预期工作!
关于c# - 将 UserManager.FindAsync 与自定义 UserStore 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31635283/
我正在尝试了解 vNext。 我编写了自定义 UserStore,它与 MongoDB 一起使用并实现了这些接口(interface): public class UserStore : IUse
默认的 MVC 5 + Identity 2.1 项目包含此行(在 Startup.Auth.cs 中): app.CreatePerOwinContextApplicationUserManager
我将 ASP.Identity 与自定义 UserStore 和 RoleStore 结合使用。 这是我的数据库上下文: public class AppDbContext : IdentityD
使用 ninject 将 UserManager 和 UserStore 注入(inject) Controller 的最优雅的方法是什么?例如,上下文可以这样注入(inject): kernel.
我是 ASP.NET Identity 的新手。为了更好地理解事情,我正在做 ASP.NET Identity 的自定义实现。我能够使用自定义代码成功创建用户。然而 FindAsync(usernam
这够好吗?或者我还必须处理 UserStore 吗?如果我确实需要任何建议,我们将不胜感激。我是 ASP.NET Identity 的新手。 using (var applicationDbConte
这是我的设置: public class ApplicationUser : IdentityUser { } public class ApplicationRole : IdentityRole
我已经实现了自定义 UserStore , 它实现了 IUserStore和 IUserPasswordStore . 我的登录操作方法如下: if (ModelState.IsValid) {
我正在尝试在 ASP.NET Core 中实现身份系统应用程序(RC2 库)并且有一个特殊的挂断让我发疯。 首先我是不是 使用 Entity Framework 。我什至没有使用 SQL。我正在备份到
我有以下通用 webApi2 AccountController:- private const string LocalLoginProvider = "Local"; privat
我正在尝试清理新 MVC5/Owin 安全实现中开箱即用的 AccountController.cs 的默认实现。我已将构造函数修改为如下所示: private UserManager UserMan
我正在做一个数据库优先的项目。 我在 VS2013 中创建了一个新的 MVC5 站点。 我创建了一个具有电子邮件属性的 applicationUser: public class Applicatio
我即将进行身份转换 Microsoft.AspNet.Identity.EntityFramework项目 (v 2.0.0.0) 到使用 NHibernate 作为其持久性机器的项目。我的第一个“绊
给定 MVC Controller 构造函数的典型设置,将 UserManager(采用 UserStore)传递给它的父类,如何将其转换为通过 IoC 注入(inject)? 从这里开始: publ
我对自定义 UserManager 和 UserStore 有点困惑。开箱即用的解决方案附带 EF 实现,我不想使用 EF,而是使用我自己的使用 MSSQL 的 DAL。我希望拥有基于声明的安全性,其
我可以使用以下代码存储用户的访问 token 以供以后在我现有的数据库中使用: // This works - Will use access token for API calls later. d
我已经为使用 ASP.NET 5、MVC 6、EF 7 和 Identity 3 的项目实现了自定义 RoleStore 和自定义 UserStore。但是,我不太清楚如何配置身份以使用我的自定义 R
我正在尝试使用 ASP.NET Core 1(2016 年 5 月)构建新网站,并且我需要实现不同类型的登录过程(不是使用 SQL Server)。 所以我正在尝试实现 MyOwnUserStore,
在使用 OWIN 请求管道创建 ApplicationUserManager 时,我在使用依赖注入(inject)创建自定义 UserStore 时遇到问题。 背景 我正在尝试将 Web 应用程序中的
我有一个相当简单的问题。我只是想测试 asp.net Identity 的 UserStore 方法并在我的测试中使用它。本质上,目标只是创建一个模拟用户存储(在内存中),插入一个虚拟用户并验证插入是
我是一名优秀的程序员,十分优秀!