2016-05-06 8 views
1

私たちはウェブアプリケーションにdjango-allauthを実装しており、ランダムなリークに直面しています。姓、名字、電子メールアドレスがランダムにフォームに漏れる

新しいユーザーがサインアップページに入ると、ユーザーは、サインアップフォームにあらかじめ最後にログインしたユーザーの姓名と電子メールアドレスを表示することがあります。これは本当にランダムに発生します。また、これは、このように単純なDjangoのフォームがCBVでself.request.userからのユーザーのインスタンスを取っているプロフィールの編集フォーム、(FormViewコントロール)で行わ:

def get_form_kwargs(self): 
    kwargs = super(ProfileView, self).get_form_kwargs() 
    kwargs.update({ 
     'instance': self.request.user 
    }) 
    return kwargs 

私たちは、ウェブサイトからallauthの基本的なデフォルト設定を使用していますインストール手順。メールの登録とログインのためだけに使用します。

allauth settings.py(他のすべての設定は、私たちが指示などで同じようなを持っているインストール済みのアプリケーション、ミドルウェアなど):として

# DJANGO-ALLAUTH 
ACCOUNT_ADAPTER = 'users.adapter.AccountAdapter' 
LOGIN_URL = '/accounts/login/' 
LOGIN_REDIRECT_URL = 'bookings:booking_add' 
ACCOUNT_FORMS = {'signup': 'users.forms.SignupForm', } 
ACCOUNT_AUTHENTICATION_METHOD = 'email' 
ACCOUNT_EMAIL_REQUIRED = True 
ACCOUNT_EMAIL_VERIFICATION = 'none' 
ACCOUNT_USERNAME_REQUIRED = False 
ACCOUNT_CONFIRM_EMAIL_ON_GET = True 
ACCOUNT_LOGOUT_ON_GET = True 
SOCIALACCOUNT_EMAIL_VERIFICATION = 'none' 
ACCOUNT_EMAIL_SUBJECT_PREFIX = "" 
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True 

AUTH_USER_MODEL = 'users.User' 

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', 
    'allauth.account.auth_backends.AuthenticationBackend', 
) 

signupView我々はデフォルト1を使用しますが、我々はまた、never_cacheを追加してみましたデコレータ(助けにはならなかった):

class SignupView(AllauthSignupView): 
    template_name = 'account/signup.html' 

signup = never_cache(SignupView.as_view()) 

SignupForm、デフォルトの上書き:

class SignupForm(AllauthSignupForm): 
    """ django-allauth usage defined in settings in ACCOUNT_FORMS""" 
    title = forms.CharField(label=_('Title'), widget=forms.Select(choices=choices.USER_TITLE)) 
    first_name = forms.CharField(label=_('First Name')) 
    last_name = forms.CharField(label=_('Last Name')) 
    email = forms.EmailField(widget=forms.TextInput(attrs={'type': 'email',})) 
    password1 = SetPasswordField(label=_("Password")) 
    password2 = CustomPasswordField(label=_("Password (again)")) 

    def __init__(self, *args, **kwargs): 

     super(SignupForm, self).__init__(*args, **kwargs) 
     set_form_field_order(self, ["title", "first_name", "last_name", "email", "password1", "password2"]) 
     for field in self.fields: 
      self.fields[field].widget.attrs['class'] = 'mdl-textfield__input' 

    class Meta: 
     fields = ('title', 'first_name', 'last_name', 'email', 'password1', 'password2') 

デフォルトallauth LoginFormとLoginViewを使用します。

これはDjango 1.8.7、nginx(1プロセス)、gunicorn(4プロセス)、スーパーバイザー(1プロセス)です。

私たちはDjangoのCBV FormViewコントロールでは、このような何か持っていたとき、別の形でこれを引き起こしてトラブルを発見した
+0

これは中から起こるん野生またはあなたのローカルテストで手動またはセレンのいずれかで発生しますか? – e4c5

+1

'set_form_field_order'とは何ですか? –

+0

@DanielRoseman allauthビルド機能(allauth.utils) –

答えて

0

def get_initial(self): 
    user = self.request.user 
    if something: 
     self.initial.update({ 
      'title': user.title, 
      'first_name': user.first_name, 
      'last_name': user.last_name, 
      'email': user.email, 
      'phone': user.phone, 
      'street': user.street, 
      'city': user.city, 
      'zip_code': user.zip_code, 
      'country': user.country 
     }) 
    return self.initial 

を次のように我々はこれを修正した:

def get_initial(self): 
    user = self.request.user 
    initial = super(PassengerAddStep1FormView, self).get_initial() 
    if something: 
     initial.update({ 
      'title': user.title, 
      'first_name': user.first_name, 
      'last_name': user.last_name, 
      'email': user.email, 
      'phone': user.phone, 
      'street': user.street, 
      'city': user.city, 
      'zip_code': user.zip_code, 
      'country': user.country 
     }) 
    return initial 
関連する問題