0

私のSatchmoプロジェクトでは、contact_contactテーブルの行の1つが新しいユーザーに再割り当てされるという厄介なバグがあります。

これは、あるブラウザウィンドウでストアにログインし、(別の新しいウィンドウで)/ accounts /register/を参照して新しいアカウントを作成した場合に発生します。最初にログアウトしても発生しません。

データベースで何が起こるかというと、私がログに記録された元のユーザー(彼のユーザープロファイルがすべて設定されている)が彼のユーザープロファイルを「失う」ということです。何が起こったのかというと、そのユーザーの「連絡先」は、新しいユーザーを「指している」ため、彼にはもう存在しません。つまり、そのuser_idフィールドは、auth_userの新しい「id」を指していることになります。連絡先レコードの内容は、新しいユーザーの情報で上書きされます。

register_form.htmlを変更する以外に、Satchmoのログインコードに変更を加えていません。

登録フォームがPOSTリクエストからユーザー情報の一部を読み取り、前のユーザーに属する連絡先を引き継ぐ可能性はありますか?

障害を再現してから、データベースで「差分」を実行しました。これが喫煙銃です:

+INSERT INTO "auth_user" VALUES(138,'newuser','New','User','y@n.org',...

-INSERT INTO "contact_contact" VALUES(1,'','Old','User',2,'Customer',NULL,'1999-01-01','x@n.org','','2012-04-30');
+INSERT INTO "contact_contact" VALUES(1,'','New','User',138,'Customer',NULL,'1999-02-02','y@n.org','','2012-04-30');

a)レコード番号1が再利用されており、b)ID138で作成された新しいユーザーを指していることがはっきりとわかります。

どうもありがとう、トーマス

4

1 に答える 1

0

これはSatchmoのバグだと確信しています。これが私の修正です:

diff -paurb src.orig//satchmo/satchmo/apps/satchmo_store/accounts/views.py src//satchmo/satchmo/apps/satchmo_store/accounts/views.py
--- src.orig//satchmo/satchmo/apps/satchmo_store/accounts/views.py    2012-03-30 07:42:40.000000000 +0200
+++ src//satchmo/satchmo/apps/satchmo_store/accounts/views.py   2012-05-09 07:33:01.000000000 +0200
@@ -194,7 +194,7 @@ def register_handle_form(request, redire
     if request.method == 'POST':
         form = RegistrationForm(request.POST)
         if form.is_valid():
-            contact = form.save(request)
+            contact = form.save(request,force_new=True)

             # look for explicit "next"
             next = request.POST.get('next', '')
于 2012-05-09T05:38:25.367 に答える