2017-07-04 5 views
1

私のウェブサイトでは、登録時に使用したメールアドレスを確認する必要があります。したがって、私は通常の確認メールを送信します。そのような電子メールがバウンスすると、私は自分の電子メールプロバイダ(sendgrid)に通知されます。 私は次回自分のウェブサイトの問題について彼が自分のメールで来たときに、その旨をユーザーに通知したいと思います。 私の電子メールプロバイダからの通知は、一部のURLに対する非同期コールバックです。ユーザーのセッションを見つけて情報を保存する方法が必要です。バウンスされた確認メールについてユーザーに通知する

電子メールを送信するときに、要求に識別子を追加すると、sendgridはそのメッセージをバウンスメッセージに含めます。しかし、何らかの理由で私は可能ならばこのようにしない方がよいでしょう。ユーザーが匿名セッションで使用した電子メールアドレスを保存し、この情報を使用してセッションを後で検索することをお勧めします。

これはやや可能ですか?匿名セッションにいくつかの情報を追加できますか?DBに保存されているので、後でそれを参照できますか?私のセッション設定はデフォルトのDjango設定ですか?

+0

このようにする必要がありますか、他の提案がありますか? –

+0

私は他の提案があります。 – tobltobs

+0

私はすべてのユーザーが一意の電子メールを送信することを前提としているので、どのユーザーの電子メールが返送されたかの情報を抽出することです。電子メールの送信方法などの詳細を共有できますか? –

答えて

0

おそらくDjango sessions systemを使用します。 manage.py startprojectで作成されたDjangoプロジェクトでは、デフォルトで有効になっています。

基本的にSessionMiddlewareは、Djangoプロジェクトに実行されたすべての要求にsession属性を追加します。あなたは、あなたの意見では、標準のPython辞書として、この属性を使用することができます。

def my_view(request): 

    # At some point, you retrieved the visitor email... 
    user_email = '[email protected]' 
    request.session['user_email'] = user_email 

この辞書に保存されている情報は、デフォルトで執拗されています。

技術的には、このdictに格納されているデータは、デフォルトのDBのテーブルdjango_sessionに保存されています。一意のsession_keyがこれらのデータに関連付けられており、このキーは訪問者のコンピュータにクッキーとして保存されます。つまり、データに有効期限があります。ユーザーがあなたのウェブサイトに戻ったときに、クッキーがまだ存在していて、古いものではない場合、数日前に保存したように、request.sessionの情報を取得できます。

デフォルトでfalse:2つの設定で

Django sessions persistency behavior can be controlled。 trueに設定すると、ユーザーがブラウザを閉じたときにセッションが破棄されます。おそらく、この値をFalseに設定しておきたいと思うでしょう。

これは秒単位で、セッションのデフォルトの継続時間です。デフォルトは2週間に対応する1209600です。

注:request.session.set_expiry()を直接呼び出すと、セッションの期間を変更できます。これにより、セッションごとのデフォルト設定を上書きすることができます。

0

Tobitobs:別の方法として、匿名の電子メールをlocalStorageバケットに添付することができます。後でこれを取得できます。しかし、私はユーザーがクッキーとブラウザの別のデータをクリアします - これらのメールは紛失します。

さらにもう1つの方法 - device-browser-device-os-IP(または何か)のスナップショットで電子メールを保存し、この情報をDBに保存します。

1

一般的に私は、匿名セッションを返すことを識別できるかどうかに頼っているとは思いません。

この問題を解決するもう1つの方法は、ユーザーが登録を完了してユーザー名とパスワードでログインできるようにすることですが、未確認のuser profile modelにあります。確認されていないユーザーは、サイト全体のアクセスを拒否される可能性があります。また、ログインした後でも、確認メールをまだ受信していない場合は再度送信するようリクエストできます。また、誤ってメールを更新するオプションがある場合もあります。

django-registrationアプリがこれを多くサポートしているようです。

ドキュメント:https://django-registration.readthedocs.io/en/2.2/install.html

+0

私はdjango-registrationを使用しています。ユーザはすでに自分のメールアドレスを入力して新しい確認メールをリクエストできます。しかし理想的には、自分のサイトに戻ったときに最後のメールが返ってきたというメモを彼らに提示することができます。 – tobltobs

関連する問題