Что не так с моей функцией user.loader для моего файла входа/регистрации?Python

Программы на Python
Ответить
Anonymous
 Что не так с моей функцией user.loader для моего файла входа/регистрации?

Сообщение Anonymous »

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

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

from flask import Flask, jsonify, request
from flask_cors import CORS
from flask_login import LoginManager, UserMixin, login_user, logout_user, current_user
from app import login
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import sqlalchemy.orm as so
from sqlalchemy.orm import Mapped, mapped_column
import sqlalchemy as sa
from dotenv import load_dotenv
from werkzeug.security import generate_password_hash, check_password_hash
import os

# Load environment variables
load_dotenv()

app = Flask(__name__)
# Use DATABASE_URL from the environment, fallback to local development URI
app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv(
'DATABASE_URL', 'sqlite:///users.db')

app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'default_secret_key')

CORS(app)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
loginmanager = LoginManager(app)
loginmanager.login_view("/login")
@loginmanager.user_loader

@login.user_loader
def load_user(id):
return db.session.get(User, int(id))

class User(UserMixin, db.Model):
__tablename__ = "user"
id : Mapped[int] = so.mapped_column(primary_key=True)
username : Mapped[str] = so.mapped_column(unique=True)
password_hash : Mapped[str] = so.mapped_column()
def __repr__(self):
return f"{self.id}/{self.username}/{self.password_hash}"

@app.route("/userreg", methods=["POST"])
def registry():
data = request.get_json()

if User.query.filter_by(username = data["username"]).first() != None:
return ("Taken")
else:
password = generate_password_hash(data["password"])
db.session.add(User(username=data["username"], password_hash=password))
db.session.commit()
return ("Registered")

@app.route("/logout")
def logout():
logout_user()

@app.route("/userlog", methods=["POST"])
def login():
data = request.get_json()
user = User.query.filter_by(username=data["username"]).first()
if user is None:
return {"success" : "No"}
else:
checkpassword = check_password_hash(user.password_hash, data["password"] )
if checkpassword:
login_user(user)
return {"success" : "Yes"}
else:
return {"success" : "No"}

@app.route("/currentuser")
def currentuser():
if current_user.is_authenticated:
return jsonify({"user" : current_user.username, "authenticated" : True})
else:
return jsonify({"user" : "NotLogged", "authenticated" : False})

@app.route("/")
def start():
return jsonify("Works")
Я пытался это несколько раз отредактировать

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

@login.user_loader
def load_user(id):
return db.session.get(User, int(id))
изменяя логин на loginmanager и другие вещи, но это должно быть простым ответом для ветеранов. Пожалуйста, помогите

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

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

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

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

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

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