mysql - 使用 EF 6 + MySQL 的 ASP.NET Identity 2 简单用户登录示例

标签 mysql asp.net asp.net-mvc entity-framework asp.net-identity

我正在使用 EF 6 和 MySQL 构建一个相当小的 ASP.NET MVC 5 应用程序,我认为使用 Identity 而不是滚动我自己的安全性会更好。我已经研究了好几天,尝试了用 Google 搜索到的所有内容,但我感觉 .NET 宇宙在我周围扩展。我已经不再领先了。

我只需要登录帐户和我正在构建的网站部分的安全性。有些页面对订阅者来说是私有(private)的,而另一些则是公开的。我希望 Identity 表位于应用程序使用的同一个 MySQL 数据库中。

我上次尝试类似的事情是 ASP.NET 2.0 中的 FormsAuth/Membership 内容 - 从那时起我就没有使用 .NET 构建过任何实质性内容 - 所以我还是一个使用 Identity 的初学者。

现在这个实验已经取得进展。我通过一系列指南和技巧让 MySQL 与 EF 6 一起工作,并采用代码优先方法实现了这一点,并成功了。表格正在生成并且数据正在流动:

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class RwcDataModel : DbContext
{
    public RwcDataModel()
        : base("name=RwcDataModel")
    {
    }

    public virtual DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

[Table("user")]
public class User
{
    [Key, Column("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int Id { get; set; }

    [Column("fullname"), StringLength(45, MinimumLength = 1)]
    public virtual string FullName { get; set; }

    [Column("email"), StringLength(45, MinimumLength = 1)]
    public virtual string Email { get; set; }

    [Column("username"), StringLength(45, MinimumLength = 1)]
    public virtual string Username { get; set; }

    [Column("password"), StringLength(45, MinimumLength = 1)]
    public virtual string Password { get; set; }

    [Column("created"), DataType(DataType.Date)]
    public virtual DateTime Created { get; set; }

    [Column("active")]
    public virtual bool Active { get; set; }
}

//...etc - other tables

public class RwcDbInitializer : DropCreateDatabaseAlways<RwcDataModel>
{
    protected override void Seed(RwcDataModel context)
    {
        context.Users.Add(new User { FullName = "Administrator", Email = "me@gmail.com", Username = "Administrator", Password = "password", Created = DateTime.Now });
        context.Users.Add(new User { FullName = "Some Guy", Email = "someguy@gmail.com", Username = "someguy", Password = "password", Created = DateTime.Now });
        context.SaveChanges();
    }
}

...在 Global 类的 Application_Start() 中:

        DbConfiguration.SetConfiguration(new MySqlEFConfiguration());
        Database.SetInitializer<RwcDataModel>(new RwcDbInitializer());

我首先尝试了这个: http://www.codeproject.com/Tips/788357/How-to-set-up-application-using-ASP-NET-Identity-w

...但这只是导致我的数据库被删除,但没有重新创建和播种。奇怪,无法解释。

感谢下面的 Trailmax,我遵循了这些(类似)说明:

http://www.asp.net/identity/overview/getting-started/aspnet-identity-using-mysql-storage-with-an-entityframework-mysql-provider

...但是在运行我的应用程序的此迭代时,没有创建任何身份表。另外,上面的 RwcDataModel 不执行任何操作。数据库没有被删除 - 就好像初始化程序被完全忽略一样。

有什么想法如何继续吗?谢谢!

最佳答案

查看此博客 ASP.NET Identity 2.1 with ASP.NET Web API 2.2 ASP.NET Identity 2.1 with ASP.NET Web API 2.2 。 Taiseer Joudeh 先生很好地解释了如何将 ASP.net Identity 2.1 与 Entity Framework 结合使用。本教程包含示例代码。虽然本教程中未使用 MySQL,但 Entity Framework 可以轻松切换到 MySQL。希望这可以帮助。干杯。

关于mysql - 使用 EF 6 + MySQL 的 ASP.NET Identity 2 简单用户登录示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573355/

相关文章:

mysql - 通过 .BAT 文件上传文件到 Owncloud

.net - 动态加载用户控件 ASP.net 中的单选选项 GroupName 问题

c# - MVC Onion 架构,一些问题

MySQL:从表中获取未包含的日期

MySQL 大量行的性能问题

mysql - 搜索用于检查 (My)SQL 语法的工具

asp.net - 使用JW Player播放音频,仅显示控制栏

jquery - 不要调用 BlockUI 来进行需要很少时间的 ajax 调用

ASP.NET MVC Nuget 启用迁移

c# - 从模型验证中排除字段