New Project --> MVC 4 --> Internet Application
を選択すると、AccountControllerが自動的に生成されます。このコントローラーでは、Login
とRegister
の2つのアクションのみを気にします。
MVC 3では、メンバーシップの静的メソッドであるValidateUser
in Login
アクションとCreateUser
in Register
を使用します。したがって、それを自分のデータベースと統合したい場合は、CustomMembershipProvider
を拡張してMembershipProvider
を作成し、その2つのメソッドをオーバーライドする必要があります。
ただし、MVC 4では、WebSecurity.Login
とWebSecurity.CreateUserAndAccount
を使用します。私の質問は次のとおりです。
WebSecurity
に変更する必要があるのですか?どうもありがとうございました。
独自のメンバーシップおよびロールプロバイダーを実装する必要があります。
カスタムプロバイダー:
namespace MyApp.Helpers
{
public class CustomProviderProvider : SimpleMembershipProvider
{
public override MembershipUser GetUser(string username, bool userIsOnline)
{
return base.GetUser(username, userIsOnline);
}
public override bool ValidateUser(string username, string password)
{
return true; // base.ValidateUser(username, password);
}
}
}
「インターセプト」するメソッド(つまり、ValidateUser)をオーバーライドする必要があります。また、web.configファイルにプロバイダーを登録する必要があります。
<system.web>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
<add name="CustomMembershipProvider" type="MyApp.Helpers.CustomMembershipProvider, MyApp" />
</providers>
</membership>
</system.web>
「InitializeSimpleMembershipAttribute」というフィルターも必要です
namespace CustomPortal.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<CustomPortalContext>(null);
try
{
using (var context = new CustomPortalContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
//Here is where you give it your connection string name
WebSecurity.InitializeDatabaseConnection("CustomPortal", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.Microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
}
これがお役に立てば幸いです...
ASP.NET MVC 4は、SimpleMembershipProviderと呼ばれる新しいメンバーシッププロバイダーを使用します。 WebMatrixは、SimpleMembershipProviderのファサードです。 ASP.NET MVC 4で構成ファイルを変更する必要はなくなりました。詳細はこちら: http://aaron-hoffman.blogspot.com/2013/02/aspnet-mvc-4-membership- users-passwords.html
1.MVC 3で行ったように、どうすれば自分のデータベースを使用できるようになりますか?
A:自分でロールしたい場合は、SimpleMembershipProviderをオーバーライドする必要はありません。 InitializeSimpleMembershipAttribute
クラスのAccountController
への参照を削除し、AccountController
クラスのメソッドを変更します。
2.何が違うのですか?静的メンバーシップメソッドを使用し続けないのはなぜですか?なぜWebSecurityに変更する必要があるのですか?
A:ASP.NET MVC 4は、新しいメンバーシッププロバイダーであるSimpleMembershipProviderを使用するようになりました。