Bild < /p>
angezeigten Fehler aus.from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from flask_dance.contrib.google import make_google_blueprint, google
import os
from flask_dance.contrib.google import make_google_blueprint, google
app = Flask(__name__)
app.secret_key = 'kasjkjk48g48d48s4848df'
# leidžiam naudoti HTTP (tik testavimui)
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
# Google OAuth blueprint
google_bp = make_google_blueprint(
client_id="501193612xxxj3de342hp2bg.apps.googleusercontent.com",
client_secret="GOCSPxxxpH28YVhpv_ELbbU",
redirect_url="http://localhost:5000/login/google/authorized", # Patikrinkite, kad šis URL tiksliai atitiktų
scope=["openid", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"]
)
app.register_blueprint(google_bp, url_prefix="/login")
# PostgreSQL nustatymai
DB_USER = 'xxxx'
DB_PASSWORD = 'xxx'
DB_HOST = '127.0.0.1'
DB_NAME = 'autogptdb'
app.config['SQLALCHEMY_DATABASE_URI'] = f'postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
#
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login' # jei vartotojas nėra prisijungęs – redirectins į login
#
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(200), nullable=True)
#
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
#
def create_tables():
with app.app_context():
db.create_all()
@app.route('/')
def home():
return render_template('index.html', user=current_user)
@app.route("/login/google/authorized")
def google_login():
if not google.authorized:
flash("Nepavyko prisijungti per Google.", "danger")
return redirect(url_for("login")) # Nebereikia dar kartą pereiti į Google login.
try:
resp = google.get("/oauth2/v2/userinfo")
if not resp.ok:
flash("Nepavyko gauti informacijos iš Google", "danger")
return redirect(url_for("login"))
user_info = resp.json()
email = user_info.get("email")
if not email:
flash("Google nepateikė el. pašto", "danger")
return redirect(url_for("login"))
user = User.query.filter_by(username=email).first()
if not user:
# Jei nėra vartotojo, sukuriame jį
user = User(username=email, password=None) # Nereikia slaptažodžio, nes prisijungta per Google
db.session.add(user)
db.session.commit()
login_user(user) # Prisijungimas
flash("Prisijungta per Google!", "success")
return redirect(url_for("home")) # Nukreipimas į pagrindinį puslapį
except Exception as e:
flash(f"Klaida: {e}", "danger")
return redirect(url_for("login"))
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
if password != confirm_password:
flash('Slaptažodžiai nesutampa', 'danger')
return redirect(url_for('register'))
hashed_password = generate_password_hash(password)
if User.query.filter_by(username=username).first():
flash('Vartotojas jau egzistuoja', 'danger')
return redirect(url_for('register'))
new_user = User(username=username, password=hashed_password)
db.session.add(new_user)
db.session.commit()
flash('Registracija sėkminga, prisijunkite', 'success')
return redirect(url_for('login'))
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.password, password):
login_user(user)
flash('Prisijungta sėkmingai', 'success')
return redirect(url_for('home'))
else:
flash('Neteisingi prisijungimo duomenys', 'danger')
return render_template('login.html')
@app.route('/dashboard')
@login_required
def dashboard():
return render_template('dashboard.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
flash('Atsijungta sėkmingai', 'info')
return redirect(url_for('home'))
if __name__ == "__main__":
create_tables()
app.run(host="0.0.0.0", port=5000, debug=True)
< /code>
Vielleicht kennt jemand die Lösung? Danke.