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