2017-02-14 2 views
2

私はasp.net mvc5プロジェクトに取り組んでいます。私の問題はユーザーのログインを強制しています。 セッションを使用してユーザーのログインをチェックしていますか(私はIDまたは認証を使用していません)。ここ は私のログインコードです:アプリケーションのどこに行く前にユーザーのログインを強制することができますか?

[HttpPost] 
    public ActionResult Login(User user) 
    { 
     if (IsValid(user.username, user.password)) 
     { 
      Session["username"] = user.username; 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      ModelState.AddModelError("", "Login details are wrong."); 
     } 
     return View(user); 
    } 

私は、ユーザーのログインを確認するかどうかのセッションではなく、私は、リンクへのユーザーアクセスを拒否することはできません、私はこれを手動で行う必要がある場合、私は追加する必要がありますすることができます私が持っているすべてのコントローラのアクションには以下のブロックコードが必要です。

public ActionResult Index() 
    { 
     if (Session["username"] != null) 
     { 
      //then user can go anywhere with any link 
     } 
     else 
     { 
      //user cannot go to here without login 
     } 
    } 

(彼らがログインしていない場合)は、任意のリンクをクリックするか、ブラウザでリンクを入力すると、私は、ログインページにリダイレクトするようにユーザーを強制することができます方法はありますか?私は経路を設定したり、フィルタ設定を使って検索していましたが、私の問題を解決してくれないようです。私はチェックコードを各コントローラ/アクションに手動で追加することなくこれを行う一般的な方法があることを願っています。

私の問題を読んでくれてありがとう、私は非常にこれを解決するために任意のコメントを充当されます。

+0

セッションがない場合は、開始ページにリダイレクトしてみてください。 – WasteD

+0

@WasteDユーザーを確認してログインページにリダイレクトすることができますが、ユーザーが来ることができるコントローラまたはアクションに検出ログインコードをコピーする必要があります。私がこれを解決できなければ、それは最終的な方法になります。とにかく私の指定したコードよりも一般的なものがあるかどうかを知る必要があります。とにかく、私に返信してくれてありがとう! –

答えて

1

コントローラのOnActionExecutingメソッドをオーバーライドする方法があります。チェックを行い、ログが記録されていない場合はホームページにリダイレクトされ、ユーザーがいる場合はアクションが許可されます。

これは、すべてのWebサイトに適用されるように、ベースコントローラー上で実行できます(すべてのコントローラーにこのコントローラーを継承させる)。この1から継承

public abstract class LoginRequiredController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (Session["username"] != null) 
     { 
      base.OnActionExecuting(filterContext); 
     } 
     else 
     { 
      //Redirect to the main page, or login, or somewhere else, without running the requested action 
      filterContext.Result = Redirect("/"); 
      return; 
     } 
    } 
} 

コントローラは、ユーザが存在することをリクエストごとにチェックし、もう1つは、それぞれの方法については、このチェックをコピー/ペーストする必要がなく、存在しない場合にはメインページにリダイレクトされます。

もちろん、ログインコントローラはそれを継承してはいけません。まったくログインできない場合もあります。

関連する問題