【问题标题】:Contact getting hijacked when a new account is created创建新帐户时联系人被劫持
【发布时间】:2012-05-08 13:23:29
【问题描述】:

在我的 Satchmo 项目中,我有一个严重的错误,即 contact_contact 表中的一行被重新分配给新用户。

如果我在一个浏览器窗口中登录商店,然后(在另一个新窗口中)通过浏览 /accounts/register/ 创建一个新帐户,就会发生这种情况。如果我先注销就不会发生这种情况。

数据库中发生的事情是我登录的原始用户(他的用户配置文件全部设置)“丢失”了他的用户配置文件。发生的事情是该用户的“联系人”不再存在,因为它现在“指向”新用户。即它的user_id 字段现在指向auth_user 中的新'id'。联系人记录的内容会被新用户的信息覆盖。

除了更改registration_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) 它现在指向使用 id 138 创建的新用户。

非常感谢, 托马斯

【问题讨论】:

  • 也许我需要了解的知识较少,但您介意展示一些代码示例,您的部件如何相互通信吗?仅从文本中我什么都不懂。

标签: django satchmo


【解决方案1】:

我很确定这是 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', '')

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多