Руи, я был в похожей лодке несколько месяцев назад, и, не имея большого опыта работы с провайдером членства, я изо всех сил пытался реализовать его должным образом, потому что я думал, что вы должны внедрить и использовать всевещь как есть, или вообще ничего.
Ну, я скоро обнаружил, что вы можете использовать только его части, а не весь объект.Например, в моем приложении у меня есть свой собственный пользовательский объект и мои собственные модули пароля и входа, но мне нужно, чтобы работала аутентификация форм.Так что я просто использую членство для этой части.Я не отменяю никаких методов или чего-либо еще, просто использую его для FormsAuthentication, затем я использую свои собственные репозитории для смены паролей, проверки паролей имени пользователя и т. Д.
Вот фрагмент из моего кода входа в MVC.
var authTicket = new FormsAuthenticationTicket(1, user.UniqueName, DateTime.UtcNow, DateTime.UtcNow.AddHours(2), rememberMe, cookieValues);
var encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.UtcNow.AddDays(14) };
httpResponseBase.Cookies.Add(authCookie);
Это позволяет мне использовать FormsAuthentication.SignOut ();методы и другие методы, предоставляемые провайдером членства.
По вашему вопросу повторно создайте случайное числовое / криптографически сильное случайное число, вот хороший метод, который вы можете использовать, я нашел его некоторое время назад, и я извиняюсь, ноне могу вспомнить, где в сети
/// <summary>
/// A simple class which can be used to generate "unguessable" verifier values.
/// </summary>
public class UnguessableGenerator
{
const string AllowableCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/^()";
const string SimpleAllowableCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
/// <summary>
/// Generates an unguessable string sequence of a certain length
/// </summary>
/// <param name="length">The length.</param>
/// <param name="useSimpleCharacterSet">if set to <c>true</c> [use simple character set].</param>
/// <returns></returns>
public static string GenerateUnguessable(int length, bool useSimpleCharacterSet = false, string additionalCharacters = "")
{
var random = new Random();
var chars = new char[length];
var charsToUse = useSimpleCharacterSet ? SimpleAllowableCharacters : AllowableCharacters;
charsToUse = string.Format("{0}{1}", charsToUse, additionalCharacters);
var allowableLength = charsToUse.Length;
for (var i = 0; i < length; i++)
{
chars[i] = charsToUse[random.Next(allowableLength)];
}
return new string(chars);
}
/// <summary>
/// Generates an ungessable string, defaults the length to what google uses (24 characters)
/// </summary>
/// <returns></returns>
public static string GenerateUnguessable()
{
return GenerateUnguessable(24);
}
}
Для отправки уникального URL-адреса, содержащего случайное число, на адрес электронной почты пользователя, что вам нужно, это в вашей таблице пользователя или любой таблице способ хранения случайного идентификатораа затем используйте его в специально созданном URL-адресе в электронном письме, которое пользователь может использовать для проверки.
Для этого потребуется создать URL-адрес, который будет принимать этот тип URL-адреса, а затем вам придется извлечь части, которые вынеобходимо сформировать строку запроса и обновить ваш пользовательский объект.
For Когда подтверждено, пользователю предлагается сменить пароль, по умолчанию в вашей таблице есть битовый флаг, который вынуждает пользователя изменить свой пароль, это произойдетудобнее и позже, если вам нужно заставить пользователя сменить пароль.Итак, ваш код входа в систему проверяет, включен ли этот битовый флаг, и если это так, то он сначала вызовет изменение пароля.Затем, как только пользователь изменит свой пароль, вы отключите этот флаг.
Надеюсь, это поможет.