gpt4 book ai didi

asp.net-mvc-4 - 如何在 MVC 4 中创建自定义 WebSecurity.Login 和 WebSecurity.CreateUserAndAccount 方法?

转载 作者:行者123 更新时间:2023-12-04 00:44:38 26 4
gpt4 key购买 nike

当我们选择New Project --> MVC 4 --> Internet Application ,它会自动为我们生成AccountController。在这个 Controller 中,我只关心 2 个 Action ,LoginRegister .

在 MVC 3 中,它使用 Membership 的静态方法,ValidateUserLogin行动和CreateUserRegister .所以,如果我想把它与我自己的数据库集成,我只需要创建 CustomMembershipProvider通过扩展 MembershipProvider并覆盖这两个方法。

但在 MVC 4 中,它使用 WebSecurity.LoginWebSecurity.CreateUserAndAccount .我的问题是:

  • 如何让它像在 MVC 3 中那样使用我自己的数据库?
  • 有什么不同?为什么不继续使用静态成员资格方法?为什么一定要改成WebSecurity ?

  • 非常感谢您的帮助。

    最佳答案

    您将需要实现自己的 Membership 和 Role 提供程序。

    自定义提供程序:

    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 - 如何在 MVC 4 中创建自定义 WebSecurity.Login 和 WebSecurity.CreateUserAndAccount 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605519/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com