Winform中使用Membership 和AspNet_regsql.exe 身份验证
2014-11-28 14:31 haoyujie 阅读(194) 评论(0) 收藏 举报写在前面
正在编写一个Winfom程序。打算使用现成的微软的解决方案。
中间遇到不少问题。
根据Membership winform 认证,等关键字找到一些文章。
不得不说,还是中国人聪明,写的文章相对实用得多。
http://www.cnblogs.com/Kiee/archive/2009/09/02/1558841.html
对我帮助比较大。
还有overstack上一些文章。
另外,自己手头有本书:《Asp.net 3.5 sp1 高级编程》的第12章,内容还是比较详实。
代码
不多说了,把代码贴上,然后说说我遇到的一些困难,希望能帮读者少走一些弯路:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="Data Source=127.0.0.1;Initial Catalog=MyLoginDb;Integrated Security=True"/> </connectionStrings> <system.web> <membership defaultProvider="SqlProvider"> <providers> <clear /> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ConnectionStringName" applicationName="Myapp" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" /> </providers> </membership> <roleManager defaultProvider="SqlProvider" enabled="true" cacheRolesInCookie="false" cookieName="MyRole" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> <providers> <add name="SqlProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ConnectionStringName" applicationName="MyApp" /> </providers> </roleManager> </system.web> </configuration>
上面是app.config
步骤是这样:
1. 建一个c# console工程。
2. add new item 中,选 app config
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Principal; using System.Web; using System.Web.Security; namespace MembershipWinform { class Program { static void Main(string[] args) { MembershipCreateStatus result; Membership.CreateUser("testuser", "abc.1234", "test@test.com", "Hood", "Pine Hills", true, out result); Console.WriteLine(result.ToString()); Roles.CreateRole("Developer"); Roles.AddUserToRole("testuser", "Developer"); if (Roles.IsUserInRole("testuser", "developer")) Console.WriteLine("Is a developer"); else Console.WriteLine("Doesn't write code."); if (Membership.ValidateUser("testuser", "abc.1234")) Console.WriteLine("User Validated."); else Console.WriteLine("User Invalid"); Console.ReadKey(); } } }
中间遇到的一些困难
总得来说,并不顺利。
因为之前一直在做别的工作,突然转过来,一开始真发蒙。
后来逐渐找到一些感觉。
这里总结一下:
1. biying搜索的关键字,需要想清楚:Membership winform ,这两个单词最好。可以加上C#,codeplex,overstack等。
2. aspnet_regsql.exe工具,还是使用图形化的吧。因为不用太用脑。如果用命令行:aspnet_regsql.exe -A all -E
如果需要指定数据库的名字(这个是一定需要的),加-s 参数。
所以,还不如使用图形化工具,什么都看得清。
[ASPNET2.0]Membership类+SQLServer2005,AspNet_regsql.exe的使用
3. 默认的连接字符串,是指向Sql express的。
<add name="MySqlConnection"
connectionString="Server=localhost; Database=aspnetdb; Integrated Security=True"
providerName="System.Data.SqlClient" />
4. 默认的密码规则,要求长度>7,所以,最开始找到的例子,他里面的密码是Pass!这样的单词,是通过不了的。
Membership.CreateUser("testuser", "Pass!", "test@test.com", "Hood", "Pine Hills", true, out result);
这句话,会传回InvalidPassword.
一开始我一直没搞清楚是怎么回事。
5. 关于角色
Roles.CreateRole("Developer");
这句话,耽误了最长的时间。
一开始,我只写的 <roleManager enabled="true"/>
怎么也不对。一到这句话,就说连不上数据库。
我还以为是连接串有问题。
后来才明白,Role与Membership一样,都需要单独设置。
也需要指定connection string!
其它资源
有一些信息,还没来得及看
http://www.codeproject.com/Articles/55174/Custom-Fluent-Nhibernate-Membership-and-Role-Provi
浙公网安备 33010602011771号