ABP vNext 身份验证登录过滤器

6 篇文章 0 订阅
4 篇文章 0 订阅

定义登录过滤器

通过过滤器控制身份认证

    public class LicenseResourceOwnerPasswordValidator : AbpResourceOwnerPasswordValidator
    {
        Utility.Util util = new Utility.Util();
        public LicenseResourceOwnerPasswordValidator(UserManager<Volo.Abp.Identity.IdentityUser> userManager,
         SignInManager<Volo.Abp.Identity.IdentityUser> signInManager,
         IdentitySecurityLogManager identitySecurityLogManager, 
         ILogger<ResourceOwnerPasswordValidator<Volo.Abp.Identity.IdentityUser>> logger, 
         IStringLocalizer<AbpIdentityServerResource> localizer,
         IOptions<AbpIdentityOptions> abpIdentityOptions,
         IHybridServiceScopeFactory serviceScopeFactory,
         IOptions<IdentityOptions> identityOptions) 
        : base(userManager, signInManager, identitySecurityLogManager, logger, localizer, abpIdentityOptions, serviceScopeFactory, identityOptions)
        {
        }

        public override Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            DateTime expiration_date = Convert.ToDateTime(util.KeyValue("Expiration_Date"));///过期时间
            DateTime startdate = DateTime.Now;
            int day = expiration_date.Subtract(startdate).Days;
            //授权验证
#if !DEBUG
           
                if (expiration_date >= DateTime.Now)
                {
                        var Validate = base.ValidateAsync(context);
                        if (context.Result.IsError && (context.Result.ErrorDescription != null && context.Result.ErrorDescription.IndexOf("用户账户已被锁定") > -1))
                        {
                            var user = UserManager.FindByNameAsync(context.UserName);
                            int Minutes = user.Result.LockoutEnd.Value.Subtract(DateTime.Now).Minutes;
                            context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, $"登录失败,用户账户已被锁定.请{Minutes}分钟后再试.");
                        }
                        else if (!context.Result.IsError)
                        {
                            if (day >= 0 && day <= 7)
                            {
                                Logger.LogWarning($"授权时间剩余{day}天!");
                            }
                        }
                        return Validate;
                    
                }
                context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, $"提示信息");
            return Task.FromResult(0);
#else 
            var Validate = base.ValidateAsync(context);
            return Validate;
#endif
        }

AbpApplicationModule.cs 注入过滤器

  public override void PreConfigureServices(ServiceConfigurationContext context)
 {
	 PreConfigure<IIdentityServerBuilder>(builder =>
	  {
	      builder.AddResourceOwnerValidator<LicenseResourceOwnerPasswordValidator>();
	  });
 	 context.Services.Replace(
    		ServiceDescriptor.Transient<AbpResourceOwnerPasswordValidator, LicenseResourceOwnerPasswordValidator>());
    }
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值