首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为特定用户生成唯一的url?

问如何为特定用户生成唯一的url?
EN

Stack Overflow用户
提问于 2020-02-03 21:13:19
回答 3查看 1.7K关注 0票数 1

我正在使用flask构建一个web应用程序,并将数据存储在一个名为Orders的表中。

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

出于方便和用户体验的目的,我不希望买家注册。我想通过电子邮件给他们一个链接,让他们直接访问他们的订单信息。因此,我将使用令牌为每个订单创建一个动态路由。我也不希望这个令牌非常明显,比如订单号或类似的东西,因为这样任何人都可以猜测一个url并返回一个不属于他们的订单。因此它必须是唯一的,并且是一个由随机字符组成的长字符串。我应该怎么做?这是一种好的方法还是糟糕的设计?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2020-02-03 21:24:57

是的,你可以使用flask中的变量规则来实现,你可以像这样在url中放置一个路径:

代码语言:javascript
复制
@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

票数 1
EN

Stack Overflow用户

发布于 2020-02-03 21:24:53

试着为你的订单使用UUID,它可以作为查询参数在你相关的路由中传递。你可以这样创建它们:

代码语言:javascript
复制
import uuid

hard_to_guess_string = uuid.uuid4()
another_string = uuid.uuid4()
票数 0
EN

Stack Overflow用户

发布于 2020-02-04 00:48:28

uuid.uuid4()的文档只说:“生成一个随机的UUID",没有保证它是否使用加密的随机生成器(也就是说,随机值是否很难猜测)。即使是RFC 4122,它指定了UUID,也说版本4的UUID是从“真随机或伪随机数”生成的,同样没有对密码质量的任何保证。

为了生成-

  • 难以猜测的值、最终用户必须键入的
  • 和
  • 可用作不记名凭据,仅拥有这些凭据就可以访问其标识的资源(RFC 4122 section 6明确不鼓励这种使用情形),即

UUID不合适。相反,导入secrets module并生成一个随机字符串,如下所示:secrets.token_hex(16),甚至secrets.token_hex(20)。请注意,与uuid不同的是,文档中的secrets模块用于生成加密随机值。另请参见Unique Random Identifiers。

此外,如果您觉得可以在不增加用户负担的情况下这样做,那么您应该考虑添加某种形式的授权,例如确认电子邮件地址或类似的功能。此外,您还应考虑订单和跟踪信息的临时性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60039972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档