ASP.NET Core-示例代码-账号状态检查

接上一篇 接口权限验证文章

https://blog.youkuaiyun.com/qq_58734875/article/details/136580497?spm=1001.2014.3001.5501

在进行权限验证时,还需检查用户账号的状态,如是否被停用。如果账号被停用,应拒绝用户的访问请求。

可以在 Startup.cs 文件中的 ConfigureServices 方法中找到对身份验证服务的配置,并在该方法内设置 options.Events

//在这里处理验证成功后的逻辑
options.Events = new JwtBearerEvents
{
    OnTokenValidated = context =>
    {
        判断是否为超级管理员
        using IServiceScope scope = context.HttpContext.RequestServices.CreateScope();
        RedisContext _redisContext = scope.ServiceProvider.GetService<RedisContext>();
      

        // 在这里处理验证成功后的逻辑
        var userId = context.Principal.FindFirst(ClaimTypes.Sid)?.Value;
        if (string.IsNullOrWhiteSpace(userId))
        {
            context.Fail("userid为空");
            return Task.CompletedTask;

        }
        //判断用户是否被冻结

        var key = GlobalConstants.REDIS_LOGIN + userId; // # 链接redis
                                                        //判断用户是否被冻结
        using IServiceScope scope1 = context.HttpContext.RequestServices.CreateScope();

        var database1 = _redisContext.GetCache<LoginRedis>(key);

        if (database1 == null)
        {
            context.Fail("错误了");
        }
        return Task.CompletedTask;

    },
    //此处为权限验证失败后触发的事件
    OnChallenge = context =>
    {
        //此处代码为终止.Net Core默认的返回类型和数据结果,这个很重要哦,必须
        context.HandleResponse();

        //自定义自己想要返回的数据结果,我这里要返回的是Json对象,通过引用Newtonsoft.Json库进行转换
        var setting = new JsonSerializerSettings
        {
            ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
        };

        var payload = JsonConvert.SerializeObject(ApiResult.error(ApplicationErrorCodeEnum.SYS_NOT_VALID_TOKEN), setting);
        //自定义返回的数据类型
        context.Response.ContentType = "application/json";
        //自定义返回状态码,默认为401 我这里改成 200
        context.Response.StatusCode = StatusCodes.Status200OK;
        //context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        //输出Json数据结果
        context.Response.WriteAsync(payload);
        return Task.FromResult(0);
    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值