Я ищу набор token authentification
, чтобы загружать файлы сервера безопасным способом и добавлять по истечении срока действия.
Требования:
- Django 1.11
- Ubuntu 18.04
- База данных PostgreSQL
Процесс:
Пользователь заполняет форму с некоторыми данными CustomerForm(email, firstname, lastname and country)
, и он должен выбрать один или несколько документов с флажками.
Когда форма отправлена, я создаю объект с пользовательской информацией + документ choosen + токен , сгенерированный из email + document_id + datetime
в sha1
формат.
Пользователь получает электронное письмо со ссылкой для скачивания в соответствии с предыдущими документами (1 электронное письмо на документ).
Ожидаемое:
В этой части я объясню, что я хотел бы сделать, но я не знаю, как это возможно, и эта часть все еще размыта в моей голове.Это первый раз, когда я пытаюсь это сделать.
Пользователь получает электронное письмо со ссылкой на основе созданного ранее токена.Когда он нажимает на ссылку, происходит процесс аутентификации, который позволяет подтвердить пользователя и открыть окно для загрузки файла документа.
Но через некоторое время (возможно, 10 минут) токен истекает, и пользовательЯ должен отправить форму заново, чтобы получить ссылку на файл документа.
Как я уже сказал, это немного расплывчато.Я должен реализовать что-то подобное, но я не знаю, как я мог это сделать.
Мои файлы:
У меня естькласс, на мой взгляд, который позволяет заполнить форму, сгенерировать токен и отправить электронное письмо.
Затем у меня есть новый класс, который позволяет сравнивать token
с базой данных и сравнивать expiration_time
с now()
тоже.
Проблема в том, что если я несколько раз открываю ссылку, now()
не актуализируется, а мой токен всегда действителен и не имеет срока действия.
class TokenDownloadView(TemplateView):
template_name = 'app/token.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['token'] = self.kwargs['token']
token = context['token']
print(token)
download = Download.objects.get(token__iexact=token)
if download and download.expiration_date > now:
print("token valide jusqu'à : " + str(download.expiration_date))
print("il est actuellement : " + str(now))
print(' ==> Token existe et valide <==')
if download and download.expiration_date < now:
print("token valide jusqu'à : " + str(download.expiration_date))
print("il est actuellement : " + str(now))
print('==> Token existe mais a expiré <==')
return context
И это то, что я получаюв моем терминале, чтобы отобразить то, что я сказал:
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
==> Token existe et valide <==
[12/Sep/2018 09:45:42] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:45:42] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
==> Token existe et valide <==
[12/Sep/2018 09:46:10] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:10] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
==> Token existe et valide <==
[12/Sep/2018 09:46:30] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:30] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
==> Token existe et valide <==
[12/Sep/2018 09:46:41] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:41] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
Есть ли у вас какие-либо идеи?
Я подозреваю, куки, и это должно быть так, но я не знаю, как яможно удалить куки по токену?