2

ASP.NETMVCWebアプリケーションを作成しています。私はデータモデルを持っていますユーザー:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Knihovna.Models
{
    public class User
    {
        public int UserId { get; set; }
        public string Name { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public List<Book> Books { get; set; }
    }
}

そして、ユーザー登録とユーザーログインを作成する必要があります。アプリケーションは、ユーザーがログインしているかどうかを知る必要があります。

それを行うためのいくつかのベストプラクティスはありますか?ログインしたユーザーをセッションに保存しますか?

4

2 に答える 2

2

ASP.NETメンバーシップとロールプロバイダーモデルを使用します。カスタムテーブルでそれを行いたい場合は、メンバーシッププロバイダーから継承するクラスを作成できます。パスワードの変更、パスワードの忘れなどをサポートするために実装できる方法はいくつかありますが、ログインするための方法はValidateUserです。

public sealed class MyMembershipProvider : MembershipProvider
{
    public override bool ValidateUser(string username, string password)
    {
        bool isValid = false;
        // your authentication logic here
        var ticket = new FormsAuthenticationTicket(
                    1,
                    YOUR_USER_ID_HERE,
                    DateTime.Now,
                    DateTime.Now.AddMinutes(30),
                    false,
                    name,
                    FormsAuthentication.FormsCookiePath);

                var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                HttpContext.Current.Response.Cookies.Add(authCookie);

        return isValid;
    }
}

また、さまざまなレベルのユーザーが必要な場合は、ロールプロバイダーを作成する必要があります。これを行うには、RoleProviderクラスから継承します。

public sealed class MyRoleProvider : RoleProvider
{
   // Implement logic here
}

アプリケーションの特定の領域を承認するには、Authorize属性を使用します。

public class MyController : Controller
{
     [Authorize(Roles="Role1,Role2")]
     public ActionResult Index()
     {
         // Implement your code
     }
}

最後に、web.configには、プロバイダーを使用するために実行する必要のある構成がいくつかあります。

<authentication mode="Forms">
  <forms loginUrl="~/Login" timeout="2880"/>
</authentication>
<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="20">
  <providers>
    <clear/>
    <add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false"/>
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider" cacheRolesInCookie="true">
  <providers>
    <clear/>
    <add name="MyRoleProvider" type="Your.NameSpace.MyRoleProvider"/>
  </providers>
</roleManager>

メンバーシップとロールプロバイダーの詳細については、MSDNを参照してください。

于 2013-01-01T21:32:57.400 に答える
2

Sessionオブジェクトを台無しにする必要はありません。

すでにASP.NETMVCを使用しているので、おそらくAccountControllerControllersフォルダーにがあります。このコントローラーには、基本認証方式があります。

ASP.NET MVCで認証と承認を使用する方法を説明し、示すASP.NETチームによるこのチュートリアルをご覧になることをお勧めします。

ASP.NETMVCの既定のVisualStudioプロジェクトテンプレートは、新しいASP.NETMVCアプリケーションが作成されたときにフォーム認証を自動的に有効にします。また、事前に作成されたアカウントログインページの実装がプロジェクトに自動的に追加されます。これにより、サイト内のセキュリティを非常に簡単に統合できます。

NerdDinnerステップ9:認証と承認

于 2013-01-01T23:16:53.863 に答える