Login Google API Flask PythonPython

Python-Programme
Anonymous
 Login Google API Flask Python

Post by Anonymous »

Ich versuche, Google Login mit Flask Python zu implementieren. Alle Tasten stimmen in meine App- und Google -API -Einstellungen überein. Überall, wo ich Localhost mit Port 5000 festgelegt habe, kann ich mich über mein Telefon anmelden, aber wenn es mit dem angemeldeten Benutzer auf die Hauptseite umleiten sollte, wirft es den in Bild Nr. 2.
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)

# ✅ Flask-Login setup
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login' # jei vartotojas nėra prisijungęs – redirectins į login

# ✅ Vartotojų modelis
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)

# ✅ User loader
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

# ✅ Sukuria lenteles, jei jų nėra
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post