Проблемы с сохранением токена в базе данных и использованием закрытого ключа для подписи токенов JWT в Flask.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с сохранением токена в базе данных и использованием закрытого ключа для подписи токенов JWT в Flask.

Сообщение Anonymous »

Я столкнулся с некоторыми проблемами при реализации аутентификации в приложении Flask. Мне нужна помощь, чтобы понять, почему мой токен не сохраняется в базе данных и почему мой закрытый ключ не работает правильно для подписи токенов JWT.
Я использую Flask с PostgreSQL для хранения пользовательские данные и генерировать токены JWT для аутентификации. Однако при попытке сохранить токен в базе данных после регистрации пользователя он сохраняется неправильно. Кроме того, при попытке подписать токены JWT с помощью моего закрытого ключа оказывается, что подпись выполняется неправильно.
Вот соответствующий фрагмент кода:

Код: Выделить всё

# Relevant code snippet

# Function to generate token
def generate_token(username, email, expiration_time=20):
# Load the private key
with open('private_key.pem', 'r') as f:
private_key = f.read()

payload_data ={
'username': username,
'email': email,
'exp': int(time.time()) + expiration_time
}
token = jwt.encode(
payload=payload_data,
key=private_key,
algorithm='RS256',
)

return token

# Route for user registration
@user_bp.route('/register', methods=['POST'])
def register_user():
# Extract json data from HTTP request using the get_json() method of the request object
data = request.get_json()
# Check if all mandatory fields are filled, if not return error
required_fields = ['username', 'email', 'password', 'confirm_password']
for field in required_fields:
if field not in data or not data[field]:
return jsonify({'error': f'Field {field} missing or empty!'}), 400

username = data['username']
email = data['email']
password = data['password']
confirm_password = data['confirm_password']

if password != confirm_password:
return jsonify({'error': 'Passwords do not match!'}), 400

try:
conn = connect_db()
cursor = conn.cursor()

# Check if username and email of the user already exist in the database, if so return error
cursor.execute("SELECT * FROM users WHERE username=%s OR email=%s", (username, email))
if cursor.fetchone() is not None:
return jsonify({'error': 'Username or email already exists!'}), 400

# Encryption before insertion into the database
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

# Creation of JWT token
expiration_time = 20  # Token expiration time in 20 seconds
token = generate_token(username, email, expiration_time)
print("token before inserting into db:", token)
# Insert the new user into the database
cursor.execute("INSERT INTO users (username, email, password,token) VALUES (%s, %s, %s, %s) RETURNING *",
(username, email, hashed_password.decode('utf-8'), token))
new_user = cursor.fetchone()
print("token before inserting into db:", token)
conn.commit()

if new_user:
user_data = {
'id': new_user[0],
'username': new_user[1],
'email': new_user[2],
'token': new_user[3]
}

else:
return jsonify({'error': 'Error retrieving user data after registration!'}), 500

except Exception as e:
return jsonify({'error': str(e)}), 500
finally:
if 'conn' in locals():
conn.close()
return jsonify({'success': True, 'message': 'User registered successfully!'}), 201

база данных изображений
При запуске этого кода токен кажется сгенерированным правильно, но он не сохраняется в базе данных. Кроме того, при попытке использовать закрытый ключ для подписи токенов JWT кажется, что подпись выполнена неправильно.
Я ценю любую помощь или предложения по решению этих проблем.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -jwt-token
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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