PetShop中的OracleMembershipProvide
Asp.net的membership缺省是放在sql server或 sql server exp中的,
如果使用Oracle就需要实现自己的memebership Provider.
Provider模式乃Asp.net2.0架构中精华之一,同时memebership也是ASP.Net2.0的要点.
1.web.config中
<membership defaultProvider=”SQLMembershipProvider”>
<providers>
<add name=”SQLMembershipProvider”
type=”System.Web.Security.SqlMembershipProvider”
connectionStringName=”SQLMembershipConnString”
applicationName=”.NET Pet Shop 4.0″
enablePasswordRetrieval=”false”
enablePasswordReset=”true”
requiresQuestionAndAnswer=”false”
requiresUniqueEmail=”false”
passwordFormat=”Hashed”/>
</providers>
</membership>
<!– Membership Provider for Oracle –>
<!–
<membership defaultProvider=”OracleMembershipProvider”>
<providers>
<clear/>
<add name=”OracleMembershipProvider”
type=”PetShop.Membership.OracleMembershipProvider”
connectionStringName=”OraMembershipConnString”
enablePasswordRetrieval=”false”
enablePasswordReset=”false”
requiresUniqueEmail=”false”
requiresQuestionAndAnswer=”false”
minRequiredPasswordLength=”7″
minRequiredNonalphanumericCharacters=”1″
applicationName=”.NET Pet Shop 4.0″
hashAlgorithmType=”SHA1″
passwordFormat=”Hashed”/>
</providers>
</membership>
–>
这里有一些配置需要注意, passwordFormat为”Hashed”时无法取回password,只能reset,此时若
enablePasswordRetrieval设为true,会出错.
if(passwordFormat == MembershipPasswordFormat.Hashed && enablePasswordRetrieval)
throw new ProviderException(”Provider cannot retrieve hashed password”);
2. Oracle的Membership表
CREATE TABLE MSPETSHOP4SERVICES.MEMBERSHIP (
UserId number NOT NULL,
Password varchar2(128 byte) NOT NULL,
PasswordFormat number NOT NULL,
MobilePin varchar2(16 byte),
Email varchar2(128 byte),
PasswordQuestion varchar2(256 byte),
PasswordAnswer varchar2(128 byte),
IsApproved char(1 byte) NOT NULL,
CreatedDate date NOT NULL,
LastLoginDate date NOT NULL,
LastPasswordChangedDate date NOT NULL,
“Comment” varchar2(4000 byte),
PasswordSalt varchar2(128 byte),
CONSTRAINT PK_MEMBERSHIP PRIMARY KEY(UserId),
CONSTRAINT FK_MEMBERSHIP_USERS FOREIGN KEY(UserId)
REFERENCES MSPETSHOP4SERVICES.USERS(UserId)
ON DELETE CASCADE);
3.OracleMembershipProvider 代码实现:
很多都没有实现.
可参照
Writing A Custom Membership Provider for your ASP.NET 2.0 Web Site
Building Custom Providers for ASP.NET 2.0 Membership
