2017-08-23 14 views
3

私のアプリケーションでは、Django Allauthを使用しています。私はユーザーのための登録フォームを持っていません。管理者は、ユーザー情報を含むExcelファイルをアップロードしてユーザーを登録します。私はこれをすべて行い、ユーザーはパスワードを自動生成することでユーザーテーブルに保存されます。ユーザーリストをアップロードしてデータベースに保存した後、各ユーザーにリセットパスワードメールを送信します。Django AllAuth - 手動でリセットパスワードメールを送信するにはどうすればよいですか?

パスワードをリセットするには、まずaccount/password/reset/ページをリセットしてメールを入力する必要があります。パスワードを変更するように指示するメールが送信されますaccount/password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/

アプリ内で直接メールを送信することはできますか? URLには、生成方法がわからないキーが含まれています。それとももっと良い方法がありますか?

答えて

2

可能です。私の解決策は、ユーザモデルpost_save信号を実装してAllauthパスワードリセットビューを呼び出し、ユーザに電子メールを送信します。最初に考慮する必要があるのは、adminユーザー作成フォームでユーザーの電子メールアドレスを必須にすることです(説明はhere)。このコードを使用してください:

from allauth.account.views import PasswordResetView 

from django.conf import settings 
from django.dispatch import receiver 
from django.http import HttpRequest 
from django.middleware.csrf import get_token 


@receiver(models.signals.post_save, sender=settings.AUTH_USER_MODEL) 
def send_reset_password_email(sender, instance, created, **kwargs): 

    if created: 

     # First create a post request to pass to the view 
     request = HttpRequest() 
     request.method = 'POST' 

     # add the absolute url to be be included in email 
     if settings.DEBUG: 
      request.META['HTTP_HOST'] = '127.0.0.1:8000' 
     else: 
      request.META['HTTP_HOST'] = 'www.mysite.com' 

     # pass the post form data 
     request.POST = { 
      'email': instance.email, 
      'csrfmiddlewaretoken': get_token(HttpRequest()) 
     } 
     PasswordResetView.as_view()(request) # email will be sent! 
+0

ありがとうございます。あなたの答えはちょうど時間でした:)私はそれをクリーンな方法で実装していませんでしたが、あなたのソリューションは素晴らしいですし、うまくいきます。 –

+0

私はそれが役に立ってうれしいです:) – davecaputo

関連する問題