环境:Windows7 IIS7 VisualStudio2008 AspNetMVC2_Preview1_VS2008
1.新建ASP.NET MVC 2 Web Applicaton(具体办法参加google或者http://asp.net/mvc)
2.修改Web.Config增加自定义MemberShipProvider
Code
<membership defaultProvider="DbMembershipProvider"> <providers> <clear/> <!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/>--> <add name="DbMembershipProvider" type="MVCDemo.Helper.DbMembershipProvider,MVCDemo" passwordFormat="Hashed" connectionStringName="MVCDemoConnectionString" applicationName="/"/> </providers> </membership>
注意添加defaultProvider,不然会出错:)
<membership defaultProvider="DbMembershipProvider"> <providers> <clear/> <!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/>--> <add name="DbMembershipProvider" type="MVCDemo.Helper.DbMembershipProvider,MVCDemo" passwordFormat="Hashed" connectionStringName="MVCDemoConnectionString" applicationName="/"/> </providers> </membership>
3.添加类MVCDemo.Helper.DbMembershipProvider
4.结合linq to sql实现DbMembershipProvider
新建linq to sql类,并在服务器资源管理器中将表拖至设计面板
重写DbMembershipProvider的各个方法
MVCDemo
using System;
using System.Collections.Specialized;
using System.Configuration;
using System.Configuration.Provider;
using System.Data;
using System.Data.Common;
using System.Web.Security;
using System.Text;
using System.Linq;
using System.Security.Cryptography;
namespace MvcDemo.Helper
{
/// <summary>
/// Generic Db Membership Provider
/// </summary>
public class DbMembershipProvider : MembershipProvider
{
private string applicationName;
private MembershipPasswordFormat passwordFormat;
private DataClassesDemoDataContext db = new DataClassesDemoDataContext();
/// <summary>
/// Initializes the provider
/// </summary>
/// <param name="name">Configuration name</param>
/// <param name="config">Configuration settings</param>
public override void Initialize(string name, NameValueCollection config)
{
if (config == null)
{
throw new ArgumentNullException("config");
}
if (String.IsNullOrEmpty(name))
{
name = "DbMembershipProvider";
}
applicationName = config["applicationName"];
passwordFormat = MembershipPasswordFormat.Hashed;
base.Initialize(name, config);
}
/// <summary>
/// Add new user to database
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="email"></param>
/// <param name="passwordQuestion"></param>
/// <param name="passwordAnswer"></param>
/// <param name="isApproved"></param>
/// <param name="providerUserKey"></param>
/// <param name="status"></param>
/// <returns></returns>
public override MembershipUser CreateUser(string username, string password, string email,
string passwordQuestion, string passwordAnswer, bool isApproved,
object providerUserKey, out MembershipCreateStatus status)
{
//添加重复性判断
if (ExistUserName(username))
{
status = MembershipCreateStatus.DuplicateUserName;
return null;
}
MVCUser mvcuser = new MVCUser()
{
EmailAddress = email,
Password = HashPassword(password),
UserName = username
};
db.MVCUser.InsertOnSubmit(mvcuser);
db.SubmitChanges();
status = MembershipCreateStatus.Success;
return GetMembershipUser(username, email);
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="newPasswordQuestion"></param>
/// <param name="newPasswordAnswer"></param>
/// <returns></returns>
public override bool ChangePasswordQuestionAndAnswer(string username, string password,
string newPasswordQuestion, string newPasswordAnswer)
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="answer"></param>
/// <returns></returns>
public override string GetPassword(string username, string answer)
{
throw new NotImplementedException();
}
/// <summary>
/// check if username duplicate
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public bool ExistUserName(string username)
{
username = username.Trim();
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a == null || a.Count() == 0)
return false;
return true;
}
/// <summary>
/// get MVCUser by username
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public MVCUser GetUserByUserName(string username)
{
username = username.Trim();
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a == null || a.Count() == 0)
return null;
return a.First();
}
/// <summary>
/// Change the password if the old password matches what is stored
/// </summary>
/// <param name="username"></param>
/// <param name="oldPassword"></param>
/// <param name="newPassword"></param>
/// <returns></returns>
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
MVCUser mvcuser = GetUserByUserName(username);
if (mvcuser == null)
return false;
if (mvcuser.Password == HashPassword(oldPassword))
{
mvcuser.Password = HashPassword(newPassword);
db.SubmitChanges();
return true;
}
return false;
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="answer"></param>
/// <returns></returns>
public override string ResetPassword(string username, string answer)
{
throw new NotImplementedException();
}
/// <summary>
/// Update User Data (not password)
/// </summary>
/// <param name="user"></param>
public override void UpdateUser(MembershipUser user)
{
var a = from muser in db.MVCUser where muser.UserName == user.UserName select muser;
if (a.Count() == 0)
return;
MVCUser mvcuser = a.First();
mvcuser.EmailAddress = user.Email;
db.SubmitChanges();
//string connString = ConfigurationManager.ConnectionStrings[connStringName].ConnectionString;
//string providerName = ConfigurationManager.ConnectionStrings[connStringName].ProviderName;
//DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
//using (DbConnection conn = provider.CreateConnection())
//{
// conn.ConnectionString = connString;
// using (DbCommand cmd = conn.CreateCommand())
// {
// cmd.CommandText = "UPDATE " + tablePrefix + "Users SET emailAddress = " + parmPrefix + "email WHERE userName = " + parmPrefix + "name";
// cmd.CommandType = CommandType.Text;
// conn.Open();
// DbParameter dpName = provider.CreateParameter();
// dpName.ParameterName = parmPrefix + "name";
// dpName.Value = user.UserName;
// cmd.Parameters.Add(dpName);
// DbParameter dpEmail = provider.CreateParameter();
// dpEmail.ParameterName = parmPrefix + "email";
// dpEmail.Value = user.Email;
// cmd.Parameters.Add(dpEmail);
// cmd.ExecuteNonQuery();
// }
//}
}
/// <summary>
/// Check username and password
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <returns></returns>
public override bool ValidateUser(string username, string password)
{
var a = from muser in db.MVCUser where muser.UserName == username && muser.Password == HashPassword(password) select muser;
if (a == null || a.Count() == 0)
return false;
return true;
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public override bool UnlockUser(string userName)
{
throw new NotImplementedException();
}
/// <summary>
/// Get User by providerUserKey
/// </summary>
/// <param name="providerUserKey"></param>
/// <param name="userIsOnline"></param>
/// <returns></returns>
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
return GetUser(providerUserKey.ToString(), userIsOnline);
}
/// <summary>
/// Get User by username
/// </summary>
/// <param name="username"></param>
/// <param name="userIsOnline"></param>
/// <returns></returns>
public override MembershipUser GetUser(string username, bool userIsOnline)
{
MVCUser mvcuser = GetUserByUserName(username);
if (mvcuser == null)
return null;
return GetMembershipUser(username, mvcuser.EmailAddress);
}
/// <summary>
/// Retrieve UserName for given email
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
public override string GetUserNameByEmail(string email)
{
var a = from muser in db.MVCUser where muser.EmailAddress == email select muser;
if (a.Count() == 0)
return null;
return a.First().UserName;
}
/// <summary>
/// Delete user from database
/// </summary>
/// <param name="username"></param>
/// <param name="deleteAllRelatedData"></param>
/// <returns></returns>
public override bool DeleteUser(string username, bool deleteAllRelatedData)
{
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a.Count() == 0)
return false;
db.MVCUser.DeleteOnSubmit(a.First());
db.SubmitChanges();
return true;
}
/// <summary>
/// Return all users in MembershipUserCollection
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
MembershipUserCollection users = new MembershipUserCollection();
var a = from muser in db.MVCUser select muser;
foreach (MVCUser user in a)
{
users.Add(GetMembershipUser(user.UserName, user.EmailAddress));
}
totalRecords = users.Count;
return users;
}
/// <summary>
/// Not implemented
/// </summary>
/// <returns></returns>
public override int GetNumberOfUsersOnline()
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="usernameToMatch"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize,
out int totalRecords)
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="emailToMatch"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize,
out int totalRecords)
{
throw new NotImplementedException();
}
/// <summary>
/// Can password be retrieved via email?
/// </summary>
public override bool EnablePasswordRetrieval
{
get { return false; }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool EnablePasswordReset
{
get { return false; }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool RequiresQuestionAndAnswer
{
get { return false; }
}
/// <summary>
/// Returns the application name as set in the web.config
/// otherwise returns BlogEngine. Set will throw an error.
/// </summary>
public override string ApplicationName
{
get { return applicationName; }
set { throw new NotImplementedException(); }
}
/// <summary>
/// Hardcoded to 5
/// </summary>
public override int MaxInvalidPasswordAttempts
{
get { return 5; }
}
/// <summary>
/// Not implemented
/// </summary>
public override int PasswordAttemptWindow
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool RequiresUniqueEmail
{
get { return false; }
}
/// <summary>
/// Password format (Clear or Hashed)
/// </summary>
public override MembershipPasswordFormat PasswordFormat
{
get { return passwordFormat; }
}
/// <summary>
/// Hardcoded to 4
/// </summary>
public override int MinRequiredPasswordLength
{
get { return 4; }
}
/// <summary>
/// Hardcoded to 0
/// </summary>
public override int MinRequiredNonAlphanumericCharacters
{
get { return 0; }
}
/// <summary>
/// Not Implemented
/// </summary>
public override string PasswordStrengthRegularExpression
{
get { throw new NotImplementedException(); }
}
private MembershipUser GetMembershipUser(string userName, string email)
{
MembershipUser user = new MembershipUser(
"DbMembershipProvider", // Provider name
userName, // Username
userName, // providerUserKey
email, // Email
String.Empty, // passwordQuestion
String.Empty, // Comment
true, // isApproved
false, // isLockedOut
DateTime.Now, // creationDate
DateTime.Now, // lastLoginDate
DateTime.Now, // lastActivityDate
DateTime.Now, // lastPasswordChangedDate
new DateTime(1980, 1, 1) // lastLockoutDate
);
return user;
} /// <summary>
/// Encrypts a string using the SHA256 algorithm.
/// </summary>
public static string HashPassword(string plainMessage)
{
byte[] data = Encoding.UTF8.GetBytes(plainMessage);
using (HashAlgorithm sha = new SHA256Managed())
{
byte[] encryptedBytes = sha.TransformFinalBlock(data, 0, data.Length);
return Convert.ToBase64String(sha.Hash);
}
}
}
}
5.修改AccountController中MvcDemo.Controllers.AccountMembershipService,采用DbMembershipProvider
using System;
using System.Collections.Specialized;
using System.Configuration;
using System.Configuration.Provider;
using System.Data;
using System.Data.Common;
using System.Web.Security;
using System.Text;
using System.Linq;
using System.Security.Cryptography;
namespace MvcDemo.Helper
{
/// <summary>
/// Generic Db Membership Provider
/// </summary>
public class DbMembershipProvider : MembershipProvider
{
private string applicationName;
private MembershipPasswordFormat passwordFormat;
private DataClassesDemoDataContext db = new DataClassesDemoDataContext();
/// <summary>
/// Initializes the provider
/// </summary>
/// <param name="name">Configuration name</param>
/// <param name="config">Configuration settings</param>
public override void Initialize(string name, NameValueCollection config)
{
if (config == null)
{
throw new ArgumentNullException("config");
}
if (String.IsNullOrEmpty(name))
{
name = "DbMembershipProvider";
}
applicationName = config["applicationName"];
passwordFormat = MembershipPasswordFormat.Hashed;
base.Initialize(name, config);
}
/// <summary>
/// Add new user to database
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="email"></param>
/// <param name="passwordQuestion"></param>
/// <param name="passwordAnswer"></param>
/// <param name="isApproved"></param>
/// <param name="providerUserKey"></param>
/// <param name="status"></param>
/// <returns></returns>
public override MembershipUser CreateUser(string username, string password, string email,
string passwordQuestion, string passwordAnswer, bool isApproved,
object providerUserKey, out MembershipCreateStatus status)
{
//添加重复性判断
if (ExistUserName(username))
{
status = MembershipCreateStatus.DuplicateUserName;
return null;
}
MVCUser mvcuser = new MVCUser()
{
EmailAddress = email,
Password = HashPassword(password),
UserName = username
};
db.MVCUser.InsertOnSubmit(mvcuser);
db.SubmitChanges();
status = MembershipCreateStatus.Success;
return GetMembershipUser(username, email);
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="newPasswordQuestion"></param>
/// <param name="newPasswordAnswer"></param>
/// <returns></returns>
public override bool ChangePasswordQuestionAndAnswer(string username, string password,
string newPasswordQuestion, string newPasswordAnswer)
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="answer"></param>
/// <returns></returns>
public override string GetPassword(string username, string answer)
{
throw new NotImplementedException();
}
/// <summary>
/// check if username duplicate
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public bool ExistUserName(string username)
{
username = username.Trim();
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a == null || a.Count() == 0)
return false;
return true;
}
/// <summary>
/// get MVCUser by username
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public MVCUser GetUserByUserName(string username)
{
username = username.Trim();
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a == null || a.Count() == 0)
return null;
return a.First();
}
/// <summary>
/// Change the password if the old password matches what is stored
/// </summary>
/// <param name="username"></param>
/// <param name="oldPassword"></param>
/// <param name="newPassword"></param>
/// <returns></returns>
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
MVCUser mvcuser = GetUserByUserName(username);
if (mvcuser == null)
return false;
if (mvcuser.Password == HashPassword(oldPassword))
{
mvcuser.Password = HashPassword(newPassword);
db.SubmitChanges();
return true;
}
return false;
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="username"></param>
/// <param name="answer"></param>
/// <returns></returns>
public override string ResetPassword(string username, string answer)
{
throw new NotImplementedException();
}
/// <summary>
/// Update User Data (not password)
/// </summary>
/// <param name="user"></param>
public override void UpdateUser(MembershipUser user)
{
var a = from muser in db.MVCUser where muser.UserName == user.UserName select muser;
if (a.Count() == 0)
return;
MVCUser mvcuser = a.First();
mvcuser.EmailAddress = user.Email;
db.SubmitChanges();
//string connString = ConfigurationManager.ConnectionStrings[connStringName].ConnectionString;
//string providerName = ConfigurationManager.ConnectionStrings[connStringName].ProviderName;
//DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
//using (DbConnection conn = provider.CreateConnection())
//{
// conn.ConnectionString = connString;
// using (DbCommand cmd = conn.CreateCommand())
// {
// cmd.CommandText = "UPDATE " + tablePrefix + "Users SET emailAddress = " + parmPrefix + "email WHERE userName = " + parmPrefix + "name";
// cmd.CommandType = CommandType.Text;
// conn.Open();
// DbParameter dpName = provider.CreateParameter();
// dpName.ParameterName = parmPrefix + "name";
// dpName.Value = user.UserName;
// cmd.Parameters.Add(dpName);
// DbParameter dpEmail = provider.CreateParameter();
// dpEmail.ParameterName = parmPrefix + "email";
// dpEmail.Value = user.Email;
// cmd.Parameters.Add(dpEmail);
// cmd.ExecuteNonQuery();
// }
//}
}
/// <summary>
/// Check username and password
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <returns></returns>
public override bool ValidateUser(string username, string password)
{
var a = from muser in db.MVCUser where muser.UserName == username && muser.Password == HashPassword(password) select muser;
if (a == null || a.Count() == 0)
return false;
return true;
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public override bool UnlockUser(string userName)
{
throw new NotImplementedException();
}
/// <summary>
/// Get User by providerUserKey
/// </summary>
/// <param name="providerUserKey"></param>
/// <param name="userIsOnline"></param>
/// <returns></returns>
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
return GetUser(providerUserKey.ToString(), userIsOnline);
}
/// <summary>
/// Get User by username
/// </summary>
/// <param name="username"></param>
/// <param name="userIsOnline"></param>
/// <returns></returns>
public override MembershipUser GetUser(string username, bool userIsOnline)
{
MVCUser mvcuser = GetUserByUserName(username);
if (mvcuser == null)
return null;
return GetMembershipUser(username, mvcuser.EmailAddress);
}
/// <summary>
/// Retrieve UserName for given email
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
public override string GetUserNameByEmail(string email)
{
var a = from muser in db.MVCUser where muser.EmailAddress == email select muser;
if (a.Count() == 0)
return null;
return a.First().UserName;
}
/// <summary>
/// Delete user from database
/// </summary>
/// <param name="username"></param>
/// <param name="deleteAllRelatedData"></param>
/// <returns></returns>
public override bool DeleteUser(string username, bool deleteAllRelatedData)
{
var a = from muser in db.MVCUser where muser.UserName == username select muser;
if (a.Count() == 0)
return false;
db.MVCUser.DeleteOnSubmit(a.First());
db.SubmitChanges();
return true;
}
/// <summary>
/// Return all users in MembershipUserCollection
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
MembershipUserCollection users = new MembershipUserCollection();
var a = from muser in db.MVCUser select muser;
foreach (MVCUser user in a)
{
users.Add(GetMembershipUser(user.UserName, user.EmailAddress));
}
totalRecords = users.Count;
return users;
}
/// <summary>
/// Not implemented
/// </summary>
/// <returns></returns>
public override int GetNumberOfUsersOnline()
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="usernameToMatch"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize,
out int totalRecords)
{
throw new NotImplementedException();
}
/// <summary>
/// Not implemented
/// </summary>
/// <param name="emailToMatch"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <returns></returns>
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize,
out int totalRecords)
{
throw new NotImplementedException();
}
/// <summary>
/// Can password be retrieved via email?
/// </summary>
public override bool EnablePasswordRetrieval
{
get { return false; }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool EnablePasswordReset
{
get { return false; }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool RequiresQuestionAndAnswer
{
get { return false; }
}
/// <summary>
/// Returns the application name as set in the web.config
/// otherwise returns BlogEngine. Set will throw an error.
/// </summary>
public override string ApplicationName
{
get { return applicationName; }
set { throw new NotImplementedException(); }
}
/// <summary>
/// Hardcoded to 5
/// </summary>
public override int MaxInvalidPasswordAttempts
{
get { return 5; }
}
/// <summary>
/// Not implemented
/// </summary>
public override int PasswordAttemptWindow
{
get { throw new NotImplementedException(); }
}
/// <summary>
/// Hardcoded to false
/// </summary>
public override bool RequiresUniqueEmail
{
get { return false; }
}
/// <summary>
/// Password format (Clear or Hashed)
/// </summary>
public override MembershipPasswordFormat PasswordFormat
{
get { return passwordFormat; }
}
/// <summary>
/// Hardcoded to 4
/// </summary>
public override int MinRequiredPasswordLength
{
get { return 4; }
}
/// <summary>
/// Hardcoded to 0
/// </summary>
public override int MinRequiredNonAlphanumericCharacters
{
get { return 0; }
}
/// <summary>
/// Not Implemented
/// </summary>
public override string PasswordStrengthRegularExpression
{
get { throw new NotImplementedException(); }
}
private MembershipUser GetMembershipUser(string userName, string email)
{
MembershipUser user = new MembershipUser(
"DbMembershipProvider", // Provider name
userName, // Username
userName, // providerUserKey
email, // Email
String.Empty, // passwordQuestion
String.Empty, // Comment
true, // isApproved
false, // isLockedOut
DateTime.Now, // creationDate
DateTime.Now, // lastLoginDate
DateTime.Now, // lastActivityDate
DateTime.Now, // lastPasswordChangedDate
new DateTime(1980, 1, 1) // lastLockoutDate
);
return user;
} /// <summary>
/// Encrypts a string using the SHA256 algorithm.
/// </summary>
public static string HashPassword(string plainMessage)
{
byte[] data = Encoding.UTF8.GetBytes(plainMessage);
using (HashAlgorithm sha = new SHA256Managed())
{
byte[] encryptedBytes = sha.TransformFinalBlock(data, 0, data.Length);
return Convert.ToBase64String(sha.Hash);
}
}
}
}
public
AccountMembershipService()
{
_provider = new Helper.DbMembershipProvider();
}
_provider = new Helper.DbMembershipProvider();
}
6.加入前后台验证,即可实现初步的成员资格
7.待续……