• ASP.NET MVC 4 SimpleMembership Provider (1)


    新的ASP.NET MVC 4.0 提供了一个新的Membership Provider,叫SimpleMembership.

    首先,我们建立一个新的solution

    首先我们先看一下web.config

    1. <connectionStrings>
    2.     <add name="DefaultConnection" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-MVC4SimpleMembershipSample-20130911133958;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnet-MVC4SimpleMembershipSample-20130911133958.mdf" providerName="System.Data.SqlClient" />
    3.  </connectionStrings>

    在这里我们要注意一下,我们链接的是visual studio 2012自带的LocalDb,如需连接,请用(LocalDb)v11.0作为Server的名字

    打开Web.config文件,加入一下内容

    1. <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
    2.       <providers>
    3.         <clear/>
    4.         <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
    5.       </providers>
    6. </roleManager>
    7. <membership defaultProvider="SimpleMembershipProvider">
    8.       <providers>
    9.         <clear/>
    10.         <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
    11.       </providers>
    12. </membership>

    打开AccountController.cs, 找到UserProfile 这个class

    比如我们加入一个自定义的属性叫Address,

    因为我们使用的是code first, 这时候,我们要enable-migrations

    完成后

    打开MigrationsConfiguration.cs之后 你可以看到自动生成的class的代码是这样的。

    这时候,我们要修改一下里面的内容

    首先,我们先引用

    using WebMatrix.WebData;

    using System.Web.Security;

    修改下面的代码

    1. public Configuration()
    2.         {
    3.             AutomaticMigrationsEnabled = true;
    4.         }
    5.  
    6.         protected override void Seed(MVC4SimpleMembershipSample.Models.UsersContext context)
    7.         {
    8.             // This method will be called after migrating to the latest version.
    9.  
    10.             // You can use the DbSet<T>.AddOrUpdate() helper extension method
    11.             // to avoid creating duplicate seed data. E.g.
    12.             //
    13.             // context.People.AddOrUpdate(
    14.             // p => p.FullName,
    15.             // new Person { FullName = "Andrew Peters" },
    16.             // new Person { FullName = "Brice Lambson" },
    17.             // new Person { FullName = "Rowan Miller" }
    18.             // );
    19.             //
    20.  
    21.             WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
    22.  
    23.             //create roles
    24.             if (!Roles.RoleExists("Admin"))
    25.                 Roles.CreateRole("Admin");
    26.  
    27.             //create a user called manager 1
    28.             if (!WebSecurity.UserExists("manager1"))
    29.                 WebSecurity.CreateUserAndAccount("manager1", "password", new { Address = "123 Evergreen Ave" });
    30.  
    31.             //assign manager1 to Admin role
    32.             if (!Roles.GetRolesForUser("manager1").Contains("Admin"))
    33.                 Roles.AddUserToRole("manager1", "Admin");
    34.         }

    要注意一点!

    这一定要改成true

    然后再Package Manager Console下运行 update-database –verbose来修改数据库。

    这时候我们检视一下数据库的状况

    可以看到,我们之前在Code First中init的那个user和role已经在数据库中了。

    这时候,我们运行整个web程序,使用我们之前已经定义好的user/password, manager1 和password

    可以看到,我们已经login到这个网站中去了。

    好了,让我们来测试一下Role的功能

    当前角色是Admin的角色的话,我们会在Index页面显示一个秘密的信息

    打开ViewsHomeIndex.cshtml

    我们添加如下代码

    成功!

  • 相关阅读:
    DevOps
    DevOps
    微信的NATIVE支付提示201商户订单号重复的解决方案
    phpstorm 破解
    Git忽略已经被版本控制的文件(添加.gitignore不会起作用)
    微信 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
    如何用AJax提交name[]数组?
    基于PHP给大家讲解防刷票的一些技巧
    为何GET只发一次TCP连接,POST发两次TCP连接
    IP地址在mysql的存储(IP地址和int的转换)
  • 原文地址:https://www.cnblogs.com/ruijiang21/p/3316047.html
Copyright © 2020-2023  润新知