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



我正在使用EF 6和MySQL构建一个相当小的ASP.NET MVC 5应用程序,我认为使用Identity而不是滚动自己的安全性会很好。我已经做了好几天了,尽我所能在谷歌上搜索,但我感觉到.NET的世界在我周围膨胀。

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

我上一次尝试这样的东西是ASP.NET 2.0中的FormsAuth/Membership内容,从那时起,我就没有用.NET构建过任何实质性的东西,所以我是一个初学者。

现在这个实验取得了进展。我通过一系列的指南和技巧让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();
    }
}

在全局类的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

但在运行我的应用程序的这个迭代时,没有创建任何Identity表。此外,上面的RwcDataModel没有任何作用。数据库没有被删除,就好像初始化程序被完全忽略了一样。

有什么想法可以继续吗?谢谢

查看此博客ASP.NET Identity 2.1 with ASP.NET Web API 2.2 ASP.NET Identity 2.1 withASP.NET Web API 2.2。Taiser Joudeh先生很好地解释了如何在实体框架中使用ASP.net Identity 2.1。教程中包含示例代码。虽然教程中没有使用MySQL,但实体框架使切换到MySQL变得很容易。希望这能有所帮助。干杯

相关内容

  • 没有找到相关文章

最新更新