User.IsInRole()在中间件中始终为false

时间:2018-05-18 09:17:28

标签: c# asp.net-core-2.0 asp.net-core-identity

我有一个简单的中间件类:

    public class RouterMiddleware {
    private readonly RequestDelegate _next;

    public RouterMiddleware(RequestDelegate next)
    {
        this._next = next;
    }

    public async Task Invoke(HttpContext context)
    {

        if (!context.User.IsInRole("Guest"))
        {
            await _next.Invoke(context);
            return;
        }

        if (context.Request.Path.StartsWithSegments("/home/") 
            || context.Request.Path.StartsWithSegments("/api/profile/")
        {
                await _next.Invoke(context);
        }
        else
        {
            context.Response.Redirect("/home/");
            return;
        }
    }

}

context.User.IsInRole("Guest")在任何情况下都会为任何角色返回false。 有没有办法检查中间件类中的用户角色?

1 个答案:

答案 0 :(得分:1)

问题出在Startup.cs。中间件的顺序是:

        app.UseMiddleware<Middleware.RouterMiddleware>();
        app.UseAuthentication();

但必须是:

        app.UseAuthentication();
        app.UseMiddleware<Middleware.RouterMiddleware>();