Python – сброс пароля через почтовый серверPython

Программы на Python
Ответить
Anonymous
 Python – сброс пароля через почтовый сервер

Сообщение Anonymous »

Я пытаюсь создать функцию сброса пароля в Python с помощью почтового сервера. Таким образом, процесс такой же, как и для любой функции сброса пароля:
  • Пользователь нажимает кнопку сброса
  • Пользователя просят написать адрес электронной почты, который будет использоваться для сброса пароля.
  • Письмо, пришедшее на их почтовый ящик, позволяет перейти по ссылке в формате http://127.0.0.1:5000/reset/eyJ1c2VybmFtZSI6ImN. Токен относится к точному адресу электронной почты.
  • И когда они нажимают ссылку, они перенаправляются на страницу сброса, где они дважды вводят новый пароль, прежде чем нажать «Отправить».
Проблема возникает на четвертом этапе функции сброса, где я получаю токен и пытаюсь обновить базу данных новыми учетными данными. имя пользователя = user_data['username'] успешно получает электронное письмо, поступающее от токена.
Проблема в том, что код не продолжается на if заявление об обновлении базы данных. Он просто обходит его и сразу возвращает render_template('reset.html')
@application.route('/reset/', methods=['GET', 'POST'])
def reset(token):
try:
print(f"Received token: {token}")
print(f"Token type: {type(token)}")

try:
user_data = s.loads(token, salt='password-reset', max_age=600)
print(f"Decoded data type: {type(user_data)}")
print(f"Decoded data: {user_data}")

if not isinstance(user_data, dict) or 'username' not in user_data:
raise ValueError("Decoded data is not a valid dictionary or missing 'username' key.")

username = user_data['username']
print(username)
except Exception as e:
print(f"Error decoding token: {e}")
flash("The reset link is invalid or has expired.")
return redirect(url_for('forget'))

if request.method == 'POST':
password = request.form['pass']
confirm_password = request.form['pass2']

if password != confirm_password:
print('Both passwords have to be the same')
else:

conn = connect_db()
cursor = conn.cursor()
cursor.execute(f'UPDATE {USERS_TABLE} SET pass = %s WHERE username = %s', (password, username))
conn.commit()

cursor.close()
conn.close()
print("Your password has been reset successfully.")
return redirect(url_for('login'))

except Exception as e:
print(f"Unexpected error: {e}")
flash("An error occurred. Please try again.")
return redirect(url_for('forget'))

return render_template('reset.html')

reset.html

Password reset

To reset your password , please fill in the text fields with your new password .
{{msg}}




new password


repeat new password

Submit






Подробнее здесь: https://stackoverflow.com/questions/792 ... ail-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»