【其实和Cqrs没啥关系】

缘由

其实没啥原因,只是觉得以前写了不知多少遍的用户登录复用性太差,实现的功能也不多。

依赖的Nuget包

CQRS学习——集成ASP.NET Identity[其五]

简单登陆

就简单登陆而言,只需要实现如下接口/抽象类:

Store相关:

IUserLockoutStore<DpfbUser,Guid> , IUserPasswordStore<DpfbUser,Guid>,  IUserTwoFactorStore<DpfbUser,Guid>, IUserEmailStore<DpfbUser,Guid>

Manager相关:

UserManager<DpfbUser, Guid>, SignInManager<DpfbUser, Guid>

打包的代码:

    public class AppSignInManager : SignInManager<DpfbUser, Guid>
    {
        public AppSignInManager()
            : base(WebContextHelper.CurrentOwinContext.Get<AppUserManager>(),
                WebContextHelper.CurrentOwinContext.Authentication)
        {

        }

        public override async Task<ClaimsIdentity> CreateUserIdentityAsync(DpfbUser user)
        {
            var userIdentity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
            return userIdentity;
        }
    }

public class AppUserManager : UserManager<DpfbUser, Guid>
    {
        public AppUserManager(DpfbUserStore store)
            : base(store)
        {

        }

        public AppUserManager()
            : this(WebContextHelper.CurrentOwinContext.Get<DpfbUserStore>())
        {

        }
    }

public class DpfbUserStore : 
        //IUserStore<DpfbUser, Guid>, 
        IUserLockoutStore<DpfbUser, Guid>,
        IUserPasswordStore<DpfbUser,Guid>,
        IUserTwoFactorStore<DpfbUser,Guid>,
        IUserEmailStore<DpfbUser,Guid>
    {
        [Dependency]
        internal IDpfbUserQueryEntry UserQueryEntry
        {
            get { return CqrsConfigurationResolver.Config.Construct<IDpfbUserQueryEntry>(); }
        }

        internal ICommandBus CommandBus
        {
            get { return CqrsConfigurationResolver.CommandBus; }
        }

        public Task CreateAsync(DpfbUser user)
        {
            throw new NotImplementedException();
        }

        public Task DeleteAsync(DpfbUser user)
        {
            throw new NotImplementedException();
        }

        public Task<DpfbUser> FindByIdAsync(Guid userId)
        {
            return UserQueryEntry.TryFetchAsync(userId);
        }

        public Task<DpfbUser> FindByNameAsync(string userName)
        {
            return UserQueryEntry.TryFetchByNameAsync(userName);
        }

        public Task UpdateAsync(DpfbUser user)
        {
            //throw new NotImplementedException();
            return Task.FromResult(0);
        }

        public void Dispose()
        {
            //do nothing
        }

        public Task<DateTimeOffset> GetLockoutEndDateAsync(DpfbUser user)
        {
            //throw new NotImplementedException();
            return Task.FromResult(new DateTimeOffset(DateTime.Now));
        }

        public Task SetLockoutEndDateAsync(DpfbUser user, DateTimeOffset lockoutEnd)
        {
            //throw new NotImplementedException();
            return Task.FromResult(0);
        }

        public Task<int> IncrementAccessFailedCountAsync(DpfbUser user)
        {
            throw new NotImplementedException();
            return Task.FromResult(0);
        }

        public Task ResetAccessFailedCountAsync(DpfbUser user)
        {
            return Task.FromResult(0);
        }

        public Task<int> GetAccessFailedCountAsync(DpfbUser user)
        {
            return Task.FromResult(0);
            throw new NotImplementedException();
        }

        public Task<bool> GetLockoutEnabledAsync(DpfbUser user)
        {
            return Task.FromResult(false);
            throw new NotImplementedException();
        }

        public Task SetLockoutEnabledAsync(DpfbUser user, bool enabled)
        {
            return Task.FromResult(0);
            throw new NotImplementedException();
        }

        public Task SetPasswordHashAsync(DpfbUser user, string passwordHash)
        {
            CommandBus.Send(new SetPasswordHashCommand() {UserId = user.Id, PasswordHash = passwordHash});
            return Task.FromResult(0);
        }

        public Task<string> GetPasswordHashAsync(DpfbUser user)
        {
            return UserQueryEntry.FetchPasswordHashAsync(user.Id);
        }

        public Task<bool> HasPasswordAsync(DpfbUser user)
        {
            return UserQueryEntry.HasPasswordAsync(user.Id);
        }

        public Task SetTwoFactorEnabledAsync(DpfbUser user, bool enabled)
        {
            return Task.FromResult(false);
            throw new NotImplementedException();
        }

        public Task<bool> GetTwoFactorEnabledAsync(DpfbUser user)
        {
            return Task.FromResult(false);
            throw new NotImplementedException();
        }

        public Task SetEmailAsync(DpfbUser user, string email)
        {
            throw new NotImplementedException();
            return Task.FromResult(0);
        }

        public Task<string> GetEmailAsync(DpfbUser user)
        {
            throw new NotImplementedException();
        }

        public Task<bool> GetEmailConfirmedAsync(DpfbUser user)
        {
            throw new NotImplementedException();
            return Task.FromResult(true);
        }

        public Task SetEmailConfirmedAsync(DpfbUser user, bool confirmed)
        {
            throw new NotImplementedException();
            return Task.FromResult(0);
        }

        public Task<DpfbUser> FindByEmailAsync(string email)
        {
            throw new NotImplementedException();
        }
    }
View Code

相关文章: