User.IsInRole() 在中间件中总是 false
User.IsInRole() always false in middleware
我得到了一个简单的中间件class:
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")
returns 在任何情况下对于任何角色都是错误的。
有什么方法可以检查中间件中的用户角色 class?
问题出在 Startup.cs
。中间件的顺序是:
app.UseMiddleware<Middleware.RouterMiddleware>();
app.UseAuthentication();
但必须是:
app.UseAuthentication();
app.UseMiddleware<Middleware.RouterMiddleware>();
我得到了一个简单的中间件class:
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")
returns 在任何情况下对于任何角色都是错误的。
有什么方法可以检查中间件中的用户角色 class?
问题出在 Startup.cs
。中间件的顺序是:
app.UseMiddleware<Middleware.RouterMiddleware>();
app.UseAuthentication();
但必须是:
app.UseAuthentication();
app.UseMiddleware<Middleware.RouterMiddleware>();