0

ユーザーがニュースレターに登録するために使用できるサイトの側面が欲しいです。

私は、このタスクを達成するための最善の方法が100%ではありません。

私が考えることができるのは非常に単純です。


送信ボタンを使用して1回入力すると、ユーザーはそこに自分のメールアドレスを入力します。

ランダムな32文字のハッシュが生成され、それらのアドレスとともにmysqlテーブル内に格納されます。

ハッシュを含むアドレスに電子メールが送信され、ユーザーに電子メールアドレスとハッシュをmysqlテーブルと照合するページに入力するように求めます。

正しければ、テーブルに追加のエントリを定義して、電子メールをアクティブにします。


それは、2つの知識が私を連れて行くことができる限りです...

私が達成したいのは、確認で、ユーザーがクリックしてアドレスを確認できるリンクをユーザーに送信することです...のようなものですhttp://www.mysite.com/users/newsletter/?user=aGuy&confirm=blahBlah

しかし、私は本当にそのようなものからどこから始めればよいのかわかりません...そして私が理解しているように、そのような方法でmysqlクエリを許可することは安全ではありません...

誰かがこの問題に関するいくつかの詳細情報を私に提供することができますか?

これは、このようなことをカバーする可能性のあるチュートリアルへの提案またはリンクの形式になっています。

お時間を割いていただきありがとうございます!!

4

2 に答える 2

3

あなたは近くにいます。

ユーザーがメールアドレスを送信したら、それをデータベースに挿入します。少なくとも、テーブルには 4 つのフィールド (id、email、verified、key) が必要です。はid単なる代理キー (自動インクリメント) です。verifiedキーは実際にはハッシュではなく、ランダムに生成された文字列 (推測が難しいもの) にする必要があります。ハッシュは決定論的であるため、ユーザーの電子メール アドレスを md5 でハッシュしても、使用しているアルゴリズムが誰かに知られると、適切なキーにはなりません。ランダムな要素の方が適していますが、やはり、推測が困難なものであれば問題なく機能します。

id電子メールには、およびを保持するリンクが含まれている必要がありますkey。を使用しidて DB 内のレコードを検索し (一意であるため) key、URL 内の がデータベースに格納されているものと一致することを確認します (キーは一意である必要はありません)。一致する場合は、verifiedtrue に設定してください。

ボーナス ポイントとして、確認メールが送信された日付を保存し、24 時間程度後に未確認のメールを除外できます。

于 2012-05-16T23:31:24.853 に答える
1

フローの説明は問題ありません。実装を開始してください。

sfGuardパッケージも同様のフローを実装してます。ソース コードとデータベース設計を確認してください。

于 2012-05-16T23:29:59.230 に答える