Как я могу создать уникальный URL для определенного пользователя c - PullRequest
1 голос
/ 03 февраля 2020

Я использую flask для создания веб-приложения и храню данные в таблице под названием Orders.

Я хочу, чтобы покупатели имели доступ к шаблону, который будет отображать данные их заказов, такие как отслеживание, статус и т. Д. c. Также я хочу дать им некоторые действия, такие как возможность вернуть заказ.

Для удобства и удобства пользователей я не хочу, чтобы покупатели регистрировались. Я хочу отправить им по электронной почте ссылку, которая напрямую предоставит им доступ к их информации о заказе. Поэтому я создам динамический маршрут c для каждого заказа с токеном. Я также не хочу, чтобы этот токен был действительно очевидным, например, номер заказа или что-то подобное, потому что тогда любой может угадать URL и вернуть заказ, который, например, не принадлежит им. Так что это должен быть уникальный и длинный набор случайных символов. Как мне это сделать, и это хороший подход или плохой дизайн?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 февраля 2020

Да, вы можете сделать это, используя Правила переменных из 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

"Поэтому я создам динамический c маршрут для каждого заказа с токен. Я также не хочу, чтобы этот токен был действительно очевидным, например, номер заказа или что-то подобное ", вы можете использовать UUID, он также поддерживается в правилах переменных, вы можете посмотреть эту ссылку введите описание ссылки здесь

0 голосов
/ 03 февраля 2020

Документация для uuid.uuid4() гласит только: «Генерировать случайный UUID», без каких-либо гарантий того, использует ли он случайный генератор шифрования c (то есть трудно ли случайные значения Угадай). Даже RF C 4122, который определяет UUID, говорит, что UUID версии 4 предназначены для генерации из «действительно случайных или псевдослучайных чисел», опять же без каких-либо гарантий по криптографии c качества.

Для цели генерации -

  • трудно угадываемых значений,
  • , которые должны вводиться конечными пользователями, и
  • служат в качестве учетных данных носителя, чьи простые владение предоставляет доступ к ресурсу, который он идентифицирует (случай использования, явно обескураженный RF C 4122 разделом 6 ),

UUID не подходит. Вместо этого импортируйте модуль secrets и сгенерируйте случайную строку следующим образом: secrets.token_hex(16) или даже secrets.token_hex(20). Обратите внимание, что в отличие от uuid, модуль secrets задокументирован для генерации криптографически случайных значений. См. Также Уникальные случайные идентификаторы .

Также вам следует рассмотреть возможность добавления какой-либо формы авторизации, например подтверждения адреса электронной почты и т. П., Если вы чувствуете, что можете сделать это, не обременяя пользователей. Также вам следует учитывать временный характер заказа и отслеживание информации.

0 голосов
/ 03 февраля 2020

Попробуйте использовать UUID, возможно, для ваших заказов - которые можно передать в качестве параметра запроса в ваших соответствующих маршрутах. Вы можете создать их как:

import uuid

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