如何为特定用户生成唯一的URL

问题描述 投票:1回答:3

我正在使用Flask来构建网络应用,并将数据存储在名为Orders的表中。

我希望买家能够访问一个模板,该模板将显示他们的订单数据,例如跟踪,状态等。我还想给他们一些操作,例如退回订单的能力。

出于方便和用户体验的目的,我不希望买家进行注册。我想通过电子邮件发送给他们一个链接,该链接将直接为他们提供访问其订单信息的权限。因此,我将为每个带有令牌的订单创建一条动态路线。我也不希望该令牌真的很明显,例如订单号或类似的东西,因为这样任何人都可以猜测一个URL并返回例如不是他们的订单。因此它必须是唯一的,并且是一长串随机字符。我应该怎么做,这是好的方法还是不好的设计?

谢谢!

python authentication flask access-token user-experience
3个回答
0
投票

也许为您的订单尝试使用UUID-可以将其作为查询参数传递到您的相关路径中。您可以将它们创建为:

import uuid

hard_to_guess_string = uuid.uuid4()
another_string = uuid.uuid4()

0
投票

是的,您可以使用烧瓶中的可变规则来执行此操作,您可以在url中放置这样的路径:

@app.route('/user/<path:dinamicPath>')
def show_subpath(dinamicPath):
   if dinamicPath == 'order':
      order = Order.get() #get your orderns from db or files
      return render_template('order.html', order=order)
   elif dinamicPath == 'otherStuff':
      ...
      return

“因此,我将为每个带有令牌的订单创建一条动态路线。我也不希望该令牌真的很明显,例如订单号或类似名称。您可以使用UUID,变量规则也支持它,您可以查看此链接enter link description here


0
投票

uuid.uuid4()的文档仅说:“生成随机UUID”,不能保证它是否使用密码随机生成器(即,是否很难猜测随机值)。甚至指定UUID的RFC 4122都说版本4 UUID也是根据“真实随机或伪随机数”生成的,同样,也无法保证密码质量。

出于生成目的—

  • 难以猜测的值,
  • 必须由最终用户输入,和
  • 仅作为拥有者的凭证来授予对其所标识的资源的访问权限(uuid.uuid4()明确劝阻的用例,]

UUID不适当。而是导入RFC 4122 section 6并生成如下所示的随机字符串:secrets module甚至secrets。请注意,与secrets.token_hex(16)不同,secrets.token_hex(20)模块记录为生成密码随机值。另请参阅uuid

[如果您认为可以在不增加用户负担的情况下进行添加,则应考虑添加某种形式的授权,例如确认电子邮件地址等。另外,您应该考虑订单和跟踪信息的临时性质。

© www.soinside.com 2019 - 2024. All rights reserved.