Проблемы со входом из-за логики сеансаPython

Программы на Python
Ответить
Anonymous
 Проблемы со входом из-за логики сеанса

Сообщение Anonymous »

Я пытаюсь использовать Python и PHP одновременно, что по большей части работает, НО вход в систему, потому что для большей части моего PHP требуется сеанс
`
if (!isset($_SESSION['session_id'])) {
header("Location: http://localhost:5000/"); // Redirect to login page if not logged in
exit();
}`

чтобы проверить, кто вошел в систему, и отобразить соответствующую страницу в зависимости от типа пользователя, сеанс Python
`from flask import Flask, render_template, request, redirect, session, flash
from app import app
from db import mysql
import pymysql
import bcrypt
import uuid

app.secret_key = 'your_secret_key'

def get_db_connection():
return mysql.connect()

@app.route('/')
def index():
return render_template('login.html')

@app.route('/login', methods=['POST'])
def login():
email = request.form['email']
password = request.form['password']
user_type = request.form['user_type']

connection = get_db_connection()
try:
with connection.cursor(pymysql.cursors.DictCursor) as cursor:
sql = """
SELECT u.*, ut.user_type_name
FROM tbl_users u
JOIN tbl_user_types ut ON u.user_type_id = ut.user_type_id
WHERE u.Email = %s AND ut.user_type_name = %s
"""
cursor.execute(sql, (email, user_type))
user = cursor.fetchone()

if user and bcrypt.checkpw(password.encode('utf-8'), user['Password'].encode('utf-8')): # Verify hashed password
session['UserID'] = user['UserID']
session['UserType'] = user['user_type_name']
session['FirstName'] = user['FirstName']
session['Email'] = user['Email']
session_id = str(uuid.uuid4())
session['session_id'] = session_id

# Store session in the database
insert_session_sql = """
INSERT INTO tbl_sessions (session_id, UserID, UserType, FirstName, Email) VALUES (%s, %s, %s, %s, %s)
"""
cursor.execute(insert_session_sql, (session_id, user['UserID'], user['user_type_name'], user['FirstName'], user['Email']))
connection.commit()

if user['user_type_name'] == 'admin':
return redirect('/admin/home')
else:
return redirect('/user/home')
else:
flash('Invalid email or password')
return redirect('/')
finally:
connection.close()

@app.route('/admin/home')
def admin_home():
if 'session_id' in session:
return render_template('admin_home.html') # Ensure you have an admin_home.html template
else:
return redirect('/')

@app.route('/user/home')
def user_home():
if 'session_id' in session:
return render_template('user_home.html') # Ensure you have a user_home.html template
else:
return redirect('/')

@app.route('/logout')
def logout():
if 'session_id' in session:
session_id = session['session_id']
connection = get_db_connection()
try:
with connection.cursor() as cursor:
delete_session_sql = "DELETE FROM tbl_sessions WHERE session_id = %s"
cursor.execute(delete_session_sql, (session_id,))
connection.commit()
finally:
connection.close()
session.clear()
return redirect('/')

@app.route('/submit-user', methods=['POST'])
def submit_user():
"""
Add a new user to the database.
"""
if request.method == 'POST':
# Get form data
first_name = request.form.get('FirstName')
last_name = request.form.get('LastName')
middle_name = request.form.get('MiddleName')
age = request.form.get('Age')
contact_number = request.form.get('ContactNumber')
address = request.form.get('Address')
email = request.form.get('Email')
password = request.form.get('Password')
user_type_id = request.form.get('user_type_id')

if not all([first_name, last_name, email, password, user_type_id]):
flash("Please fill in all required fields.", "danger")
return redirect('/')

hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

connection = get_db_connection()
try:
with connection.cursor() as cursor:
query = """
INSERT INTO tbl_users (FirstName, LastName, MiddleName, Age, ContactNumber, Address, Email, Password, user_type_id)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(query, (
first_name, last_name, middle_name, age, contact_number, address, email, hashed_password, user_type_id
))
connection.commit()
flash("User successfully added!", "success")
return redirect('/read-all-users-html')
except Exception as e:
flash("An error occurred while adding the user. Please try again.", "danger")
print(f"User creation error: {e}")
finally:
connection.close()

if __name__ == "__main__":
app.run(debug=True)
`

по какой-то причине не переводится на php, из-за чего, когда вы правильно входите в систему и переходите, например, на домашнюю страницу администратора, он просто перенаправляется обратно на вход в систему. Может ли кто-нибудь порекомендовать мне какое-нибудь решение этой проблемы?
Я проделал некоторые работы, например, сохранил сеанс в базе данных.
```TABLE tbl_sessions (
session_id varchar(255) NOT NULL,
UserID int(11) NOT NULL,
UserType varchar(50) NOT NULL,
FirstName varchar(50) NOT NULL,
Email varchar(100) NOT NULL,
created_at метка времени NOT NULL DEFAULT current_timestamp(),
ПЕРВИЧНЫЙ КЛЮЧ (session_id),
KEY UserID (UserID),
CONSTRAINT tbl_sessions_ibfk_1 ВНЕШНИЙ КЛЮЧ (UserID) ССЫЛКИ на tbl_users (UserID) ПРИ УДАЛЕНИИ КАСКАДА
and the session is gonna be fetched to the php page but idk it still wont work.


Подробнее здесь: https://stackoverflow.com/questions/793 ... sion-logic
Ответить

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

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

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

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

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