저번 답변 달아주셔서 감사합니다.
감사하다는 인사도 못드렸었네요…
아 그리고 곧 새해 복 많이들 받으세요!!
기존 프로젝트에 docker로 사용된 부분이 있어서 사용해보고 log도 찍어보았지만 아직 해결을 하지 못해서 다시 한번 문의듣립니다.
현재 dotnet API 테스트는 postman으로 테스트 진행하고 있으며,
문제되고 있는 소스 부분입니다.
찾아보니 인증에 관련된 부분이던데
string authToken = _authService.GetAuthToken(ctx.Request);
이 부분에서 null값이 나타나기에 문제가 나타나는것으로 확인됩니다.
아래 내용은 configure 전체 내용입니다.
public void Configure(
IApplicationBuilder app,
IWebHostEnvironment env,
IAuthenticationService authenticationService,
hairdressing_project_dbContext dbContext
)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/error");
// app.UseHsts();
}
// Forwarded headers
app.UseForwardedHeaders();
// Global CORS
app.UseCors(AllowedOriginsConf);
// app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMiddleware<LoggingService>();
if (Program.RESTRICT_ACCESS)
{
app.UseWhen(
ctx => !OpenRoutes.Any(r => ctx.Request.Path.Value.Contains(r)),
builder =>
{
builder.Use(async (ctx, next) =>
{
using (var servicesScope = app.ApplicationServices.CreateScope())
{
var services = servicesScope.ServiceProvider;
var _authService = services.GetService<IAuthorizationService>();
string authToken = _authService.GetAuthToken(ctx.Request);
if (authToken != null && authenticationService.ValidateUserToken(authToken))
{
string userId = authenticationService.GetUserIdFromToken(authToken);
if (ulong.TryParse(userId, out ulong id))
{
var _dbCtx = services.GetService<hairdressing_project_dbContext>();
var user = await _dbCtx.Users.FindAsync(id);
if (user != null)
{
if (RestrictedRoutes.Any(r => ctx.Request.Path.Value.Contains(r)))
{
if (ctx.Request.Path.Value.StartsWith("/users") || ctx.Request.Path.Value.StartsWith("/accounts"))
{
var reqId = ctx.Request.Path.Value.Split("/").Last();
if (!string.IsNullOrWhiteSpace(reqId) && reqId != "users")
{
if (ulong.TryParse(reqId, out ulong parsedPathId))
{
if (id != parsedPathId && user.UserRole != "admin")
{
await ReturnErrorMessage(ctx);
return;
}
}
}
else
{
if (user.UserRole != "admin")
{
await ReturnErrorMessage(ctx);
return;
}
}
}
}
await next();
return;
}
}
}
await ReturnErrorMessage(ctx);
return;
}
});
}
);
}
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}