ASP.NET Core統合テストでログインユーザーをシミュレートする姿勢
3055 ワード
いずれのユーザ認証方式においても、最終的には認証に成功した後にHttpContextを設定する.User、後続の処理段階はHttpContext.を通過する.ユーザー情報を取得します.HttpContext.を直接修正できればUserは、アナログログインの目的を達成することができ、ASP.NET Coreのミドルウェア(middleware)は生まれながらにしてHttpContextを任意に修正できる能力を備えており、この考えを実現するのに苦労しない.
まず、アナログログインユーザを実装し、HttpContextを変更する.Userのミドルウェア.
まず、アナログログインユーザを実装し、HttpContextを変更する.Userのミドルウェア.
app.Use(async (context, next) =>
{
var claims = new Claim[] { new Claim(ClaimTypes.Name, "cnblogs") };
var claimsIdentity = new ClaimsIdentity(claims, "Basic");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
context.User = claimsPrincipal;
await next();
});
そして、上記のミドルウェアをIStartupFilterで登録することで、Startupよりも先に確保することができる.Configureに登録されているミドルウェア.public class FakeUserStartupFilter : IStartupFilter
{
public Action Configure(Action next)
{
return app =>
{
//app.Use(...);
next(app);
};
}
}
最後にWebApplicationFactoryのConfigureWebHostメソッドを書き換えることでIStartupFilterのインプリメンテーションを登録します.public class StoreWebAppFactory : WebApplicationFactory
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.AddTransient();
});
base.ConfigureWebHost(builder);
}
}
これで楽にできました.