Spaces:
Sleeping
Sleeping
File size: 2,999 Bytes
d6f1e5b 60a3b87 d6f1e5b f50ce8c 60a3b87 f50ce8c 60a3b87 f50ce8c 60a3b87 d6f1e5b 60a3b87 d6f1e5b 3cb819c d6f1e5b 60a3b87 d6f1e5b 3cb819c d6f1e5b 60a3b87 d6f1e5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
from flask import Flask, render_template, request, redirect, url_for, flash, session, make_response
from datetime import datetime, timedelta
from pymongo import MongoClient
from bson.objectid import ObjectId
import pytz
import os
from werkzeug.security import generate_password_hash, check_password_hash
from dotenv import load_dotenv # For hiding Secrets
# Load environment variables from .env
load_dotenv()
app = Flask(__name__)
app.secret_key = os.getenv("SECRET_KEY") # Secret key from .env # Required for flash and sessions
# MongoDB connection
# MongoDB connection from .env
MONGO_URI = os.getenv("MONGO_URI")
client = MongoClient(MONGO_URI)
# Database and Collection setup
db = client.login_app
users = db.login # Collection name
# Home Page - index page
@app.route('/')
def index():
if 'user' in session:
return render_template("index.html", username=session['user'])
return redirect(url_for('login'))
# Signup Page
@app.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
username = request.form['username'].strip()
password = request.form['password'].strip()
if users.find_one({'username': username}):
flash("Username already exists!", "danger")
return redirect(url_for('signup'))
hashed_pw = generate_password_hash(password)
users.insert_one({'username': username, 'password': hashed_pw})
flash("Signup successful! Please login.", "success")
return redirect(url_for('login'))
return render_template('signup.html')
# Login Page
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username'].strip()
password = request.form['password'].strip()
remember = request.form.get('remember')
user = users.find_one({'username': username})
if user and check_password_hash(user['password'], password):
session['user'] = username
# If "Remember Me" is checked, set cookie
resp = make_response(redirect(url_for('index')))
if remember:
resp.set_cookie('remember_token', username, max_age=60*60*24*7) # 7 days
return resp
else:
flash("Invalid username or password!", "danger")
return redirect(url_for('login'))
# Auto login using remember me cookie
remember_token = request.cookies.get('remember_token')
if remember_token and users.find_one({'username': remember_token}):
session['user'] = remember_token
return redirect(url_for('index'))
return render_template('login.html')
# Logout
@app.route('/logout')
def logout():
session.pop('user', None)
resp = make_response(redirect(url_for('login')))
resp.set_cookie('remember_token', '', expires=0) # Clear cookie
flash("You have been logged out.", "info")
return resp
if __name__ == "__main__":
app.run(debug=True)
|