是否存在仅检查用户名密码组合的Membership.ValidateUser备选方案?换句话说,有没有办法告诉用户名和密码是正确的,但用户无效?在为注册实施确认电子邮件时,它可能会派上用场。
答案 0 :(得分:0)
是,
只需在用户数据存储区中进行查找。
例如
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;
}
我没有对此进行编译或测试,但它应该为您提供您所追求的内容。