Cav*_*man 7 c# asp.net asp.net-identity asp.net-identity-2
我试图找到一种方法来禁用Identity 2.0中的用户,似乎无法找到任何信息.
我想基本上将用户设置为IsActive = false,并且希望在创建用户后立即执行此操作.但是,我需要一种方法来为我们的网站管理员设置IsActive.我已经拥有ASP.Net会员资格,但我希望将网站转换为MVC和身份.
根据我的要求,我们要求人们继续注册帐户,但我们希望默认情况下禁用它.然后,当我们收到加入付款时,我们将返回并启用它们.我们还使用它来禁用用户订阅时,他们没有续订.
有没有办法在不删除帐户的情况下禁用帐户或仅将其锁定X段时间?到目前为止,我还没有找到任何方法只是在Identity中禁用用户,我很惊讶这个问题以前没有出现过.
ozz*_*ozz 13
当您创建一个安装了标识位的站点时,您的站点将有一个名为"IdentityModels.cs"的文件.在此文件中有一个名为ApplicationUser的类,它继承自IdentityUser.
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
Run Code Online (Sandbox Code Playgroud)
这里的评论中有一个很好的链接,为了方便点击这里
本教程将准确告诉您为用户添加自定义属性需要执行的操作.
实际上,甚至不用费心去看教程.
1)向ApplicationUser类添加属性,例如:
public bool? IsEnabled { get; set; }
Run Code Online (Sandbox Code Playgroud)
2)在数据库的AspNetUsers表中添加一个具有相同名称的列.
3)热潮,就是这样!
现在在您的AccountController中,您有一个Register操作,如下所示:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, IsEnabled = true };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
Run Code Online (Sandbox Code Playgroud)
我在创建ApplicationUser对象时添加了IsEnabled = true.该值现在将保留在AspNetUsers表的新列中.
然后,您需要通过覆盖ApplicationSignInManager中的PasswordSignInAsync来处理检查此值作为登录过程的一部分.
我做了如下:
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
{
var user = UserManager.FindByEmailAsync(userName).Result;
if ((user.IsEnabled.HasValue && !user.IsEnabled.Value) || !user.IsEnabled.HasValue)
{
return Task.FromResult<SignInStatus>(SignInStatus.LockedOut);
}
return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
}
Run Code Online (Sandbox Code Playgroud)
您的里程可能会有所不同,您可能不想退回SignInStatus,但您明白了.
正在对此进行一些研究,结果证明IdentityUser基类有一些与此主题相关的属性.即:LockoutEnabled和LockoutEndDateUtc.
设置LockoutEnabled为true和LockoutEndDateUtc未来某个日期就足够了,以便标准SignInManager.PasswordSignInAsync可以在没有任何覆盖或自定义的情况下进行相应的操作.
如果您只想禁用用户而不指定任何确切的重新激活日期,您可以将其设置为DateTime.MaxValue.
| 归档时间: |
|
| 查看次数: |
8240 次 |
| 最近记录: |