0
是否有一个Membership.ValidateUser替代方案,只检查用户名密码组合?换句话说,有没有一种方法可以告诉用户名和密码是正确的,但用户无效?在实施注册确认电子邮件时,它可能会很方便。是否有只会检查用户名密码组合的Membership.ValidateUser()替代方法?
是否有一个Membership.ValidateUser替代方案,只检查用户名密码组合?换句话说,有没有一种方法可以告诉用户名和密码是正确的,但用户无效?在实施注册确认电子邮件时,它可能会很方便。是否有只会检查用户名密码组合的Membership.ValidateUser()替代方法?
是,
只需在用户数据存储区中执行查找即可。
例如。
public static string IsUserValid(string username, string password)
{
if(!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password))
{
var allIsGood = true;
// query user datastore for username and password
// change allIsGood to true or false based on result
return allIsGood;
}
return false;
}
编辑:
因为我使用的加密密码和MD5哈希值。所以这个辅助类可能会有所帮助
#region Usings
using System.Security.Cryptography;
using System.Text;
#endregion
namespace Shared.Tools
{
public static class Crypto
{
public static string CalculateMd5Hash(string input)
{
// step 1, calculate MD5 hash from input
var md5 = System.Security.Cryptography.MD5.Create();
var inputBytes = Encoding.ASCII.GetBytes(input);
var hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
var sb = new StringBuilder();
for (var i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString();
}
public static string GetHashValue(this MD5 hash, string value)
{
return GetHashValue(hash, Encoding.UTF8.GetBytes(value));
}
public static string GetHashValue(this MD5 hash, byte[] value)
{
var data = hash.ComputeHash(value);
var md5 = "";
for (var i = 0; i < data.Length; i++)
{
md5 += data[i].ToString("x2").ToLowerInvariant();
}
return md5;
}
public static string MD5(this string value)
{
var algorithm =
System.Security.Cryptography.MD5.Create();
var data = Encoding.ASCII.GetBytes(value);
data = algorithm.ComputeHash(data);
var md5 = "";
for (var i = 0; i < data.Length; i++)
{
md5 += data[i].ToString("x2").ToLower();
}
return md5;
}
}
}
和
public static string IsUserValid(string username, string password)
{
// using Linq to Entities/Sql
return YourDataContext
.Users
.Where(u => u.UserName == username
&& u.Password == password.MD5)
.FirstOrDefault() != null;
}
我还没有编译或测试这一点,你可能会为你的测试方法做这样的事情,但它应该给你的你要点在之后。
但密码存储为加密,并且aspnet-membership正在处理所有这些。你知道我应该使用什么特定的存储过程吗? – TPR 2011-12-29 02:20:27
是的加密通常是一个MD5哈希。请参阅我的编辑 – Peter 2011-12-30 23:53:47
MD5是非托管资源,应予以处置。 – usr 2011-12-31 22:26:14