本文目录
- ChangePassWord控件不调用我自定义的MemberShipProvider.changePassword函数
- allow roles =““ 角色的值是什么怎么来的或者要怎么定义角色名
- 如何自定义Membership所使用的数据库
- sqlmembershipprovider aspnet_ 前缀能不能改
- asp.net登陆注册控件怎么用
- MVC中关于Membership类跟数据库的问题
- 怎么使用WebService重写RoleProvider和MembershipProvider
- c# MemberShip问题
ChangePassWord控件不调用我自定义的MemberShipProvider.changePassword函数
string newpwd = ChangePassword1.NewPassword;
string confirmpwd = ChangePassword1.ConfirmNewPassword;
这样可以获取新密码和确认密码啊。
allow roles =““ 角色的值是什么怎么来的或者要怎么定义角色名
你这个是asp.net程序吧,在asp.net里面有一种东西membershipprovider,就是成员关系提供程序,这个有自定义的或者使用系统自带的两种,更高级一些有基于声明的身份验证之类,这个里面定义了角色,但让就你写的这些,还有可能是wcf里面检验用户权限的,也能像你这么写,这些roles都是一个权限系统定义的,或者自定义的
如何自定义Membership所使用的数据库
Membership是ASP.NET2.0提供的一组集成员资格、角色管理、个性化设置以及SQL Web事件提供程序为一体API,我们可以使用Membership简化对我们系统的编程操作。
但由于诸多原因在实际项目中我们却很少使用它,
其原因之一便是在默认情况下Membership需要创建一个独立的数据库以支持其所有功能。
本文将告诉您如何配置Membership使用自己的数据库
需要解决的问题:
1.如何让自己的数据库支持Membership
2.如何配置Membership使用自己的数据库
具体步骤如下(由于本人使用的是VisualStudio2010所以步骤按2010具体描述,与2008的不同之处则在后面备注):
1.在我们的解决方案中添加一个ASP.NET网站
2.打开Web.config文件并找到Membership节(注:使2008的朋友找不到该节点,您可以在该路径C:/Windows/Microsoft.NET/Framework/v2.0.50727/CONFIG/下找到System.Web复制该节点下的内容到您的Web.config的System.Web节下)
3.在connectionStrings中添加如下节点
4.在Membership节下的providers节中《add》节之前添加一个《clear/》节
5.找到Membership节中的connectionStringName将当前文件中所有与其属性值相同的字符串(即:上图中的ApplicationServices)替换为MemberShipDemoDB
6.使用aspnet_regsql注册您的数据库
至此您应用程序中的Membership就可以正常使用您自己的数据库作为其功能支持的数据库了
-word
sqlmembershipprovider aspnet_ 前缀能不能改
不可以修改,membership provider中的数据存储在表中,所以那些表和字段名都是限定不可更改的,修改后会导致找不到表,并且,修改前缀没什么意义。
你可以自己实现一个 membership provider或者自己定义一套权限体系,更适合自己的项目
-s
asp.net登陆注册控件怎么用
1.好像不可以,没找到相应的代码,这东西你可以自己写的,然后用Membership创建用户
2.这种控件很方便的,而且都测试过的,重要的是基于membershipprovider,asp.net内置的很多东西都直接使用它,有轮子为什么还要自己写呢?像我们做和微软的产品交互的,他们都是用membership,你们要是也做的话,自己写特例显然无法交互。如果你嫌功能不够,完全可以扩展的啊,控件不行可以自己写,那个注册用户的向导可以转成模板的,随便你添加什么东西
3.自己写membershipprovider你可以支持任何东西作为用户资料的存储方,扔到webservice上面都可以
4.System.Web.Security.Membership
-word
MVC中关于Membership类跟数据库的问题
Membership它们用的是ASPNETDB这个数据库,但我们可以使用我们自定义的数据库,然而除非我们自定义的数据库有着跟这个ASPNETDB一样的模式,否则ASP.NET提供的默认的SqlMembershipProvider将无法被使用。
也就是说,如果我们还要用ASP.NET提供的SqlMembershipProvider,我们就必须ASPNETDB这个数据库文件或是它的拷贝。明显,这不是我们要的。
为此,若我们使用了自定义的数据库(而非ASPNETDB的拷贝),那么我们就必须写自己的MembershipProvider。步骤如下。
1,定义好自己的数据库,此例中为TestDB01。在我的TestDB01下有一表UserInfo,其下有字段UserID,UserName,UserAge。
2,写自己的MembershipProvider,这个类继承自命名空间System.Web.Security下的MembershipProvider类。这一步很简单,创建一个空类,举例名为MyMembershipProvider,技术上说我们可以把它放在应用程序的任何位置,但我把它放在了项目下的一个名为Infrastructure(自己加的)的文件夹下。
这一步的初始代码形式大概如下:
namespace MvcApplication5.Infrastructure
{
public class MyMembershipProvider : System.Web.Security.MembershipProvider/*我把命名空间写这了*/
{
}
}
当然,它是空的,它需要我们往里面再加一些东西。。
此时我们把光标放到“System.Web.Security.MembershipProvider”上并右击鼠标,在弹出的下拉框上我们可以看到“实现虚拟类”(我用的是英文版,我不知道有没有翻译对,原内容是“Emplement Abstract Class”),单击这一选项我们的MyMembershipProvider这个类顿时多了N多个方法,此时它的形式如下(我只截了一部分):
public class MyMembershipProvider : System.Web.Security.MembershipProvider
{
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
throw new NotImplementedException();
}
//...
public override bool ValidateUser(string username, string password)
{
throw new NotImplementedException();
}
}
可以看到,这些方法什么都没做,除了抛出一个NotImplementedException异常。当然,这不是我们希望的,这些方法需要我们自己去填充,要不然怎么叫“自定义”呢。。
呃,现在先把我们先不管别的方法,只看最后的这个ValidateUser()方法。顾名思义,这个正是我们用来验证用户的方法,对其修改如下:
public override bool ValidateUser(string username, string password)
{
SqlConnection sqlconn = new SqlConnection(“Data Source=HCNG-PC;Initial Catalog=TestDB01;Integrated Security=True“);/*用你的数据源名替换HCNG-PC,且TestDB01是我用来测试的自定义数据库*/
SqlCommand sqlcmd = new SqlCommand(“select UserID, UserName from [UserInfo] where UserName = @userName and UserAge = @userAge“, sqlconn);/*这些相信你都明白,若有不明,请补充问题*/
try
{
sqlconn.Open();
sqlcmd.Parameters.Add(new SqlParameter(“@userName“, SqlDbType.NVarChar, 50));
sqlcmd.Parameters[“@userName“].Value = username.Trim();
sqlcmd.Parameters.Add(new SqlParameter(“@userAge“, SqlDbType.SmallInt, 2));
sqlcmd.Parameters[“@userAge“].Value = password;
SqlDataReader sqlRd = sqlcmd.ExecuteReader();
if (sqlRd.HasRows)
{
return true;
}
return false;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
至此,我们的自定义MembershipProvider算是完成。
3,配置web.config。把此配置文件下的《system.web》节点下的默认的《membership》节点换成如下:
《system.web》
《membership defaultProvider=“MyMembershipProvider“》
《providers》
《clear/》
《add name=“MyMembershipProvider“ 《!--前三行要用到的名字。。--》type=“MvcApplication5.Infrastructure.MyMembershipProvider“/》《!--注意不要漏了命名空间的名字。。--》
《/providers》
《/membership》
4,工作基本完成,只剩查看效果了。
在项目下加一个Default1Controller,在此Default1Controller下加如下action:
[HttpPost]
public ActionResult Index(string username, string password)
{
if (Membership.ValidateUser(username, password))
{
ViewData[“message“] = “OK“;
}
else
{
ViewData[“message“] = “NO“;
}
return View();
}
发现了吧,用个Membership.ValidateUser()就行了。
相信同时你也发现了,这样的自定义MembershipProvider似乎实在是没起到什么特别的作用,至少我是这么认为的。。
而且在MVC中最好不用登录控件,所以我们若在MVC中自定义MembershipProvider跟写自己的会员管理逻辑已没什么差别。。
如果你确实要使用自定义的MembershipProvider的话,那么以上代码显然是不够的,比如System.Web.Security.MembershipProvider的第一个方法ChangePassword(),它用来更改用户密码,这需要我们自己写的代码来实现它的逻辑。。
然后是第二个方法ChangePasswordQuestionAndAnswer()用来为用户提供更改问题答案功能,第三个方法CreateUser()来用创建新用户。。
以上是MembershipProvider,接下来还有RoleProvider,下面是一个自定义RoleProvider的一部分:
public class MyRoleProvider : RoleProvider
{
public override string GetRolesForUser(string username)
{
if (username == “Steve“)
return new string { “ApprovedMember“, “CommentsModerator“ };
else
return new string { };
}
/* 被省略的部分 */
}
当然,有关RoleProvider,要说的还有它的web.config节点配置,希望你上网查查,如果你还是确定你要用它的话。。
还有就是自定义ProfileProvider,跟前二者差不多,同样如果你确定想用它的话。。
对于你的问题,概括地回答是:
1,问:那现在可不可以设置连接到自己的数据库呢?答:可以设置连接到自己的数据库。
2,问:可以的话具体要怎么做?答:如上所示。。
3,问:不可以的话?答:没有不可以的话。。只是,如果“不想这样做的话”,找本书或是网上下个例子就知道了。。
最后的话:
我之所以把自定义MembershipProvider写的稍微详细一点,并不是为了告诉你这个东西有多好用,只是告诉你它的原理。呃,我看这个东西就是出于这个目的。。
之所以很是简单地讲了一点自定义RoleProvider跟自定义ProfileProvider,除了实现它们的做法差不多外,更多的是因为打字并不是一件美差。。
而至于为什么我们能如此简单地自定义这些Provider,有兴趣看看设计模式中的“策略模式”吧。
如果不明白的话,请补充问题,希望我能帮到你。
如果这对你有帮助话,请将此标为最佳答案,谢谢。
-s
怎么使用WebService重写RoleProvider和MembershipProvider
CreateUserWizard.MembershipProvider?
看你的出错信息,还是用的默认的那个MembershipProvider,设置一下所用的MembershipProvider,不论是控件异或web.config
保佑你自定义的MembershipProvider可用
-word
c# MemberShip问题
配置ASP.net的临时目录不受Indexing service服务的影响的步骤如下:
1、开始 -- 管理工具 -- 计算机管理(Win2003的位置,其他操作系统类似)打开计算机管理
2、展开计算机管理左边树中“服务和应用程序”节点,再在其下展开“索引服务”节点,再在其下展开“System”节点,再在其下展开“目录”节点。
3、在计算机管理的右边我们可以看到配置的索引服务目录。
4、在“目录”节点上右击鼠标,选择“新建”--“目录”
5、在“添加目录”对话框中,路经输入框中输入 ASP.net 的临时文件目录。默认应该是:
c:\《WINDIR》\Microsoft.NET\Framework\《Version Number》\Temporary ASP.NET Files 目录。
《Version Number》 指你要处理的.net版本。
6、在“包含在索引中吗?”选项中,选择“否”
7、单击“确定”按钮
8、在“索引服务”节点上右键单击,重起索引服务即可。
(可用记事本打开 c:\winnt\microsoft.net\framework\《Version Number》\Config\machine.config
查找 “processModel“里的userName=“machine“ 把它改成 userName=“System“ )
-s