Существует ли альтернатива Membership.ValidateUser (), которая проверяет только комбинацию имени пользователя и пароля? - PullRequest
0 голосов
/ 29 декабря 2011

Существует ли альтернатива Membership.ValidateUser, которая проверяет только комбинацию имени пользователя и пароля?Другими словами, могу ли я сказать, что имя пользователя и пароль верны, но пользователь недействителен?Это может пригодиться при внедрении электронного письма с подтверждением регистрации.

1 Ответ

0 голосов
/ 29 декабря 2011

Да,

просто выполните поиск в хранилище данных пользователя.

например.

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;
}

EDIT:

для зашифрованного пароля, который я использую, и MD5 Hash. так что этот вспомогательный класс может быть полезен

#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;
}

Я не скомпилировал и не протестировал это, но он должен дать вам суть того, что вы ищете.

...