有没有办法知道用户是否拥有域?

Is there a way to know if an user owns a domain?

我正在开发一个网络应用程序 (Django),让用户只需点击几下就可以拥有一个网上商店。我为 https://shopname.mydomain.es 下的商店提供服务,但如果他们愿意,我可以让他们选择使用域名。

例如,我的一个用户 (user1) 在他选择的域名提供商处购买了“happyuser.com”。然后我告诉他们修改他们的 DNS 以指向我的服务器。到目前为止一切顺利,一切正常,我使用 Nginx 允许从连接的域进行访问并且一切正常。

我的疑惑来了。我使用一个中间件来检测主机,在本例中为“happyuser.com”,我检查了一个table,其中我有用户和域名之间的关系。

class UserDomain(models.Model):
   user = ForeingKey(...)
   domain = UrlField(...)

然后我告诉 Django 为正确的商店提供服务。但是,如果另一个用户 (user2) 也保存了域“happyuser.com”,会发生什么情况,我怎么知道我应该加载哪个用户商店?。我知道这种情况不太可能发生,但有没有办法防止这个问题?

在正式将域与该用户帐户相关联之前,您需要对域进行某种形式的激活过程。例如:

  • 要求用户在 DNS TXT 记录中存储特定值(为该用户随机生成),或设置特定的随机 CNAME 子域(例如 ijiqjwv87123rbbv8123.happyuser.com)以指向您的域。然后查询该 DNS 记录,看看它是否符合预期。
  • 要求用户根据需要设置 DNS 记录以指向您的服务器,然后向该自定义域和特定路径(例如 happyuser.com/check)发出 HTTP 请求并期望收到一些特定令牌来自您自己的服务器。

这两种方式都证明用户已经根据您只给他们的指示故意配置了他们显然可以控制的域,证明他们必须是域的所有意图和目的的所有者。

我认为你是对的,这是一个不太可能出现的问题。花很多时间在上面没有多大意义。确保 table 与客户域在该列上具有唯一索引,停止问题形式的发生并花一些时间来实施。