Rui、私は数ヶ月前に同様のボートに乗っていましたが、以前はメンバーシッププロバイダーにあまり触れていなかったので、適切に実装するのに苦労しました。すべてをそのまま実装して使用する必要があると思ったからです、またはまったく何もありません。
オブジェクト全体ではなく、その一部しか使用できないことがすぐにわかりました。たとえば、私のアプリケーションには、独自のユーザー オブジェクトと独自のパスワードおよびログイン モジュールがありますが、フォーム認証を機能させる必要がありました。したがって、基本的には、その部分にメンバーシップ プロバイダーを使用するだけです。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(); を使用できるようになります。メンバシップ プロバイダが提供するメソッドおよびその他のメソッド。
あなたの質問について、randomGuid/Cryptographically strong random number を作成します。これは、使用できる良い方法です。少し前に見つけました。申し訳ありませんが、Web のどこにあるか思い出せません。
/// <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 をユーザーの電子メール アドレスに送信する場合、ユーザー テーブルまたは任意のテーブルに、ランダム ID を格納し、それをユーザーが使用できる電子メールの細工された URL で使用する方法が必要です。確認。
これには、そのタイプの Url を受け入れる Url を作成する必要があります。次に、クエリ文字列から必要な部分を抽出し、ユーザー オブジェクトを更新する必要があります。
確認されると、ユーザーはパスワードの変更を求められます。デフォルトでは、ユーザーにパスワードの変更を強制するビットフラグがテーブルに含まれています。これは、後でユーザーにパスワードの変更を強制する必要がある場合にも役立ちます。そのため、ログイン コードは、このビット フラグがオンになっているかどうかを確認し、オンになっている場合は、最初にパスワードの変更を強制します。次に、ユーザーがパスワードを変更したら、このフラグをオフにします。
お役に立てれば。