0

MVC 4 ASP.net サイトを作成しようとしています。私はプログラミングが初めてなので、ユーザーがログインしているかどうかに基づいてビューをレンダリングする正しい方法を知りたいです。

マイ コード: ユーザーが [インデックス]、[概要]、および [連絡先] ページにアクセスできないように制限しようとしています。ユーザーがログインしている場合にのみ、それらのページ (ビュー) に移動します。私の質問は、「これは正しい方法ですか、それとも間違っていますか? これを行うためのより安全で効果的で受け入れられる方法はありますか?」

あれば教えてください。ありがとうございました

public class HomeController : Controller
{
    public ActionResult Index()
    {
        if (User.Identity.IsAuthenticated)
        {
            return View();
        }
        return RedirectToRoute(new { controller = "Account", action = "Login" });
    }

    public ActionResult About()
    {
        if (User.Identity.IsAuthenticated)
        {
            ViewBag.Message = "Your app description page.";
            return View();
        }
        return RedirectToRoute(new { controller = "Account", action = "Login" });

    }

    public ActionResult Contact()
    {
        if (User.Identity.IsAuthenticated)
        {
            ViewBag.Message = "Your contact page.";

            return View();

        }
        return RedirectToRoute(new { controller = "Account", action = "Login" });
    }
4

2 に答える 2

1

この場合の一般的な方法は、 [Authorize] ( AuthorizeAttribute ) の使用です。特定のアクションまたはコントローラー全体に追加できます。特定のユーザー制限とロールもサポートします。

SimpleMembership プロバイダーに基づいてすべての基本機能を作成する、Visual Studio の既定の MVC ソリューションから始めることができます。

完全な説明については、NerdDinner プロジェクト ( http://nerddinnerbook.s3.amazonaws.com/Part9.htm ) を参照してください。

于 2013-06-17T04:28:08.487 に答える
1

Authorize 属性を使用すると、承認が事前定義された役割または個々のユーザーに制限されていることを示すことができます。

  • これにより、サイトのページを閲覧できるユーザーを高度に制御できます。
  • 認証されていないユーザーが Authorize 属性でマークされたメソッドにアクセスしようとすると、フレームワークはステータス コードをMVC返します。401 HTTP
  • サイトがASP.NETフォーム認証を使用するように構成されている場合、401ステータス コードにより、ブラウザーはユーザーをログイン ページにリダイレクトします。

[Authorize]以下のように、すべてのメソッドでログインが必要な場合は、コントローラーで使用できます。

[Authorize]
public class HomeController : Controller
{
    public ActionResult Index()
    { 
       return View();      
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your app description page.";   
        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";
        return View();
    }

コントローラー自体に配置する代わりに、必要に応じて特定のメソッドに属性を配置することもできます。たとえば、ユーザーにIndex()メソッドのみをログインさせたい場合は、次のようにします。

 public class HomeController : Controller
 {
    [Authorize]
    public ActionResult Index()
    { 
       return View();      
    }
 }
于 2013-06-17T04:30:46.493 に答える