2017-10-17 10 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

を試してみてください。そのロジックを追加する必要があります。これはX-Yの問題かもしれません – Nkosi

+0

こんにちは@Nkosi、すばやい返信をいただきありがとうございます。私はelse条件を取り除き、if文の後に 'await next(context);と呼ぶだけで、まだ空白のページを取得しています。 –

答えて

3

コード内の現在のロジックを調べると、ユーザーがnullでなくプロファイルが完成している場合、コールが短絡することがあります。そのロジックを追加する必要があります。

はなりショートコール私は、ユーザーが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。これは完全に機能します。 –

関連する問題