2017-10-17 7 views
3

aspnet 코어 2.0을 처음 접했을 때 내가하고 싶은 것은 자신의 프로필을 완료하지 않은 사용자를 그렇게 할 수있는 페이지로 리디렉션하는 것입니다. Identity Server에 대한 사용자 인증과 함께 기본 템플릿을 사용하고 있습니다.사용자가 aspnet core 2.0에서 프로파일을 완료하도록하는 방법은 무엇입니까?

미들웨어를 사용해 보았지만 리디렉션 페이지가 비어 있습니다. 이것이 최선의 접근 방법인가 아니면 누군가가 효과를 발휘하도록 도울 수 있습니까? 여기 내 미들웨어입니다.

public class FarmProfileMiddleware 
{ 
    private readonly RequestDelegate next; 

    public FarmProfileMiddleware(RequestDelegate next) 
    { 
     this.next = next; 

    } 

    public async Task Invoke(HttpContext context, UserManager<ApplicationUser> userManager) 
    { 
     var user = await userManager.GetUserAsync(context.User); 
     if (user != null) 
     { 
      if (!user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile")) 
      { 
       var url = context.Request.PathBase + "/Users/Profile"; 
       context.Response.Redirect(url);  
      } 
     } 
     else 
     { 
      await next(context); 
     } 
    } 
} 

미리 감사드립니다.

+0

그냥 코드에서 현재의 논리에서 찾고 시도하는 사용자가 null는 아니고, 그 프로필 것 단락 호출을 완료합니다. 그 논리를 추가해야합니다. 이것은 X-Y 문제 일 수 있습니다. – Nkosi

+0

안녕하세요 @ Nkosi, 빠른 답장을 보내 주셔서 감사합니다. else 조건을 제거하고 if 문 다음에'await next (context);를 호출했습니다. 여전히 빈 페이지가 나타납니다. –

답변

3

코드에서 현재 논리를 살펴보면 사용자가 null이 아니고 프로필이 완료되면 통화가 단락 될 것입니다. 그 논리를 추가해야합니다.

내가 알 다음

var user = await userManager.GetUserAsync(context.User); 
if (user != null && !user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile")) { 
    var url = context.Request.PathBase + "/Users/Profile"; 
    context.Response.Redirect(url);    
} else { 
    await next(context); 
} 
+0

감사합니다 @ Nkosi. 이것은 완벽하게 작동합니다. –