我正在使用flask构建一个web应用程序,并将数据存储在一个名为Orders的表中。
我希望买家有权访问一个模板,将显示他们的订单数据,如跟踪,状态等。我还想给他们一些行动,如退回订单的能力。
出于方便和用户体验的目的,我不希望买家注册。我想通过电子邮件给他们一个链接,让他们直接访问他们的订单信息。因此,我将使用令牌为每个订单创建一个动态路由。我也不希望这个令牌非常明显,比如订单号或类似的东西,因为这样任何人都可以猜测一个url并返回一个不属于他们的订单。因此它必须是唯一的,并且是一个由随机字符组成的长字符串。我应该怎么做?这是一种好的方法还是糟糕的设计?
谢谢!
发布于 2020-02-03 21:24:57
是的,你可以使用flask中的变量规则来实现,你可以像这样在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
发布于 2020-02-03 21:24:53
试着为你的订单使用UUID,它可以作为查询参数在你相关的路由中传递。你可以这样创建它们:
import uuid
hard_to_guess_string = uuid.uuid4()
another_string = uuid.uuid4()发布于 2020-02-04 00:48:28
uuid.uuid4()的文档只说:“生成一个随机的UUID",没有保证它是否使用加密的随机生成器(也就是说,随机值是否很难猜测)。即使是RFC 4122,它指定了UUID,也说版本4的UUID是从“真随机或伪随机数”生成的,同样没有对密码质量的任何保证。
为了生成-
UUID不合适。相反,导入secrets module并生成一个随机字符串,如下所示:secrets.token_hex(16),甚至secrets.token_hex(20)。请注意,与uuid不同的是,文档中的secrets模块用于生成加密随机值。另请参见Unique Random Identifiers。
此外,如果您觉得可以在不增加用户负担的情况下这样做,那么您应该考虑添加某种形式的授权,例如确认电子邮件地址或类似的功能。此外,您还应考虑订单和跟踪信息的临时性。
https://stackoverflow.com/questions/60039972
复制相似问题