1

ユーザーが登録プロセスを完了したら、確認メールをユーザーに送信する必要があります。メールの送信方法は知っていますが、検証リンクを送信するプロセスを知る必要があります。テーブルに列を作成して検証トークンを保存し、暗号化して送信する必要があります。検証トークンを保存する必要がある場合、このトークンを生成する最適な方法は何ですか。私は解決策を試しません。

4

3 に答える 3

2

ユーザーが正常に登録されたら、次のように GUID を生成することをお勧めします。

Guid theVerificationCode;
theVerificationCode = Guid.NewGuid();

ここで、この GUID 値をデータベース列 (おそらく のUserようなテーブル) に格納します。

メールを送信するときに、次のように、クエリ文字列を介して URL の一部としてこの確認コードの値を提供できます。

string theVerificationCode = GetVerificationCodeFromDatabase();
string theEmailLink = "https://www.yoursite.com/YourApp/Verify.aspx?code=" + theVerificationCode;

Verify.aspx最後に、クエリ文字列で渡されたものとデータベースの内容が一致するロジックをページに組み込む必要があります。一致する場合はユーザーの認証を許可し、一致しない場合はエラー メッセージを表示します。

于 2013-10-17T11:09:03.937 に答える
1

「ActivationToken」などのフィールドを作成し、GUID を生成することをお勧めします。これは、newid() 関数を呼び出すことによって SQL で直接行うか、Guid.NewGuid() を呼び出すことによって C# で行うことができます。これは非常にユニークでランダムな値であり、力ずくではほぼ不可能です。

したがって、ユーザーが登録するときは、次のようにします。

insert into tblUsers (Username, Password, Active, ActivationToken) values ('johndoe', 'mypassword', 0, newid())

リンクは次のようになります: http://yoururl.com/Activate.aspx?token= {yourActivationGuid}

Update tblUsers set Active=1 where ActivationToken={yourActivationGuid}

UserID が既に GUID である場合は、それを使用するだけで済む可能性があります (aspnet_user テーブルを使用している場合など)。ログインを許可しない場合は、Active フラグが true に設定されているかどうかを確認してください。そうでない場合は、ログインを許可しません。

したがって、ログインを検証するには、次のようにします。

select * from tblUsers where Username="johndoe" and Password="mypassword" and Active=1
于 2013-10-17T11:07:10.743 に答える
1

はい、テーブルに列を作成して検証トークンを保存する必要があります。

アクティベーションコードを「GUID」として持つことができます

同じことを行う簡単な方法は次のとおりです。

  1. ユーザー ID、検証トークン、および作成日を組み合わせて、クエリ文字列を作成します。

  2. 結合文字列のエンコードを行う

    "?user=" + Convert.ToBase64String(Encoding.Unicode.GetBytes(String.Format("user={0}&code={1}&cd={2}", ユーザー ID, 検証, 作成日))) ;

  3. リンクをユーザーに送信する

  4. ユーザーがリンクをクリックすると、クエリ文字列がデコードされます

  5. 「&」を使用してスパイトすることにより、結合された値を区切ります

    Encoding.Unicode.GetString(Convert.FromBase64String(ActivationDetails)).Split(new Char[] { '&' });

アカウントを有効にするために必要なすべての値があります。また、ロジックと暗号化方法を追加することもできます。ただし、基本はそのまま。

お役に立てれば。

于 2013-10-17T11:46:16.983 に答える