|
|
--- |
|
|
title: Flask Login |
|
|
emoji: ๐ป |
|
|
colorFrom: green |
|
|
colorTo: indigo |
|
|
sdk: docker |
|
|
pinned: true |
|
|
license: mit |
|
|
short_description: A simple yet comprehensive Flask-based user authentication. |
|
|
--- |
|
|
|
|
|
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference |
|
|
|
|
|
--- |
|
|
|
|
|
# Flask Login System ๐ |
|
|
|
|
|
A simple yet comprehensive Flask-based user authentication system with SQLite database integration, featuring user registration, login, session management, and "Remember Me" functionality. |
|
|
|
|
|
**Live Demo:** [https://rahul23232-flask-login.hf.space/](https://rahul23232-flask-login.hf.space/) |
|
|
|
|
|
## ๐ Table of Contents |
|
|
|
|
|
- [Features](#features) |
|
|
- [Technologies Used](#technologies-used) |
|
|
- [Installation](#installation) |
|
|
- [Usage](#usage) |
|
|
- [Project Structure](#project-structure) |
|
|
- [API Routes](#api-routes) |
|
|
- [Database Schema](#database-schema) |
|
|
- [Security Considerations](#security-considerations) |
|
|
- [Contributing](#contributing) |
|
|
- [License](#license) |
|
|
|
|
|
## โจ Features |
|
|
|
|
|
- **User Registration**: Create new user accounts with unique usernames |
|
|
- **User Authentication**: Secure login system with credential verification |
|
|
- **Session Management**: Server-side session handling for user state |
|
|
- **Remember Me**: Optional persistent login that survives browser restarts |
|
|
- **Cookie Management**: Last visit tracking with customizable expiration |
|
|
- **SQLite Integration**: Lightweight database for user storage |
|
|
- **Responsive Design**: Clean, user-friendly interface |
|
|
- **Error Handling**: Proper validation and error messages |
|
|
|
|
|
## ๐ ๏ธ Technologies Used |
|
|
|
|
|
- **Backend**: Python 3.x, Flask |
|
|
- **Database**: SQLite3 |
|
|
- **Frontend**: HTML, CSS (Bootstrap-compatible) |
|
|
- **Session Management**: Flask Sessions |
|
|
- **Deployment**: Hugging Face Spaces |
|
|
|
|
|
## ๐ฆ Installation |
|
|
|
|
|
### Prerequisites |
|
|
|
|
|
- Python 3.7 or higher |
|
|
- pip (Python package installer) |
|
|
|
|
|
### Local Setup |
|
|
|
|
|
1. **Clone the repository** |
|
|
```bash |
|
|
git clone https://github.com/yourusername/flask-login-system.git |
|
|
cd flask-login-system |
|
|
``` |
|
|
|
|
|
2. **Install dependencies** |
|
|
```bash |
|
|
pip install flask |
|
|
``` |
|
|
|
|
|
3. **Run the application** |
|
|
```bash |
|
|
python app.py |
|
|
``` |
|
|
|
|
|
4. **Access the application** |
|
|
- Open your browser and navigate to `http://localhost:5000` |
|
|
|
|
|
### Docker Setup (for Hugging Face Spaces) |
|
|
|
|
|
The project includes Docker configuration for deployment on Hugging Face Spaces: |
|
|
|
|
|
```dockerfile |
|
|
FROM python:3.9-slim |
|
|
|
|
|
WORKDIR /app |
|
|
|
|
|
COPY requirements.txt . |
|
|
RUN pip install -r requirements.txt |
|
|
|
|
|
COPY . . |
|
|
|
|
|
EXPOSE 7860 |
|
|
|
|
|
CMD ["python", "app.py"] |
|
|
``` |
|
|
|
|
|
## ๐ฏ Usage |
|
|
|
|
|
### Getting Started |
|
|
|
|
|
1. **Access the Application**: Navigate to the home URL |
|
|
2. **Create Account**: Click "Sign Up" to create a new user account |
|
|
3. **Login**: Use your credentials to log in |
|
|
4. **Remember Me**: Check the "Remember Me" option to stay logged in |
|
|
5. **Logout**: Click "Logout" to end your session |
|
|
|
|
|
### User Flow |
|
|
|
|
|
```mermaid |
|
|
graph TD |
|
|
A[Visit Homepage] --> B{User Logged In?} |
|
|
B -->|No| C[Redirect to Login] |
|
|
B -->|Yes| D[Show Dashboard] |
|
|
C --> E[Login Form] |
|
|
E --> F[Submit Credentials] |
|
|
F --> G{Valid Credentials?} |
|
|
G -->|No| H[Show Error] |
|
|
G -->|Yes| I[Create Session] |
|
|
I --> J{Remember Me?} |
|
|
J -->|Yes| K[Set Permanent Session] |
|
|
J -->|No| L[Set Temporary Session] |
|
|
K --> D |
|
|
L --> D |
|
|
D --> M[Logout Option] |
|
|
M --> N[Clear Session & Cookies] |
|
|
N --> C |
|
|
``` |
|
|
|
|
|
## ๐ Project Structure |
|
|
|
|
|
``` |
|
|
flask-login-system/ |
|
|
โโโ app.py # Main Flask application |
|
|
โโโ templates/ # HTML templates |
|
|
โ โโโ base.html # Base template |
|
|
โ โโโ login.html # Login page |
|
|
โ โโโ signup.html # Registration page |
|
|
โ โโโ home.html # Dashboard/home page |
|
|
โโโ static/ # Static files (CSS, JS, images) |
|
|
โ โโโ style.css # Custom styles |
|
|
โโโ users.db # SQLite database (created automatically) |
|
|
โโโ requirements.txt # Python dependencies |
|
|
โโโ Dockerfile # Docker configuration |
|
|
โโโ README.md # Project documentation |
|
|
โโโ .gitignore # Git ignore rules |
|
|
``` |
|
|
|
|
|
## ๐ฃ๏ธ API Routes |
|
|
|
|
|
### Public Routes |
|
|
|
|
|
| Route | Method | Description | Parameters | |
|
|
|-------|---------|-------------|------------| |
|
|
| `/login` | GET, POST | User login page | `username`, `password`, `remember` | |
|
|
| `/signup` | GET, POST | User registration | `username`, `password` | |
|
|
|
|
|
### Protected Routes |
|
|
|
|
|
| Route | Method | Description | Authentication Required | |
|
|
|-------|---------|-------------|------------------------| |
|
|
| `/` | GET | Homepage/Dashboard | Yes | |
|
|
| `/logout` | GET | User logout | Yes | |
|
|
|
|
|
### Route Details |
|
|
|
|
|
#### `/` (Homepage) |
|
|
- **Method**: GET |
|
|
- **Authentication**: Required |
|
|
- **Description**: Main dashboard showing welcome message and last visit info |
|
|
- **Response**: Redirects to login if not authenticated |
|
|
|
|
|
#### `/signup` (Registration) |
|
|
- **Methods**: GET, POST |
|
|
- **Parameters**: |
|
|
- `username` (string): Unique username |
|
|
- `password` (string): User password |
|
|
- **Validation**: Username must be unique |
|
|
- **Response**: Redirects to login on success |
|
|
|
|
|
#### `/login` (Authentication) |
|
|
- **Methods**: GET, POST |
|
|
- **Parameters**: |
|
|
- `username` (string): User's username |
|
|
- `password` (string): User's password |
|
|
- `remember` (checkbox): Optional "Remember Me" |
|
|
- **Response**: Redirects to homepage on success |
|
|
|
|
|
#### `/logout` (Session Termination) |
|
|
- **Method**: GET |
|
|
- **Description**: Clears session and cookies |
|
|
- **Response**: Redirects to login page |
|
|
|
|
|
## ๐๏ธ Database Schema |
|
|
|
|
|
### Users Table |
|
|
|
|
|
```sql |
|
|
CREATE TABLE users ( |
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
|
|
username TEXT UNIQUE NOT NULL, |
|
|
password TEXT NOT NULL |
|
|
); |
|
|
``` |
|
|
|
|
|
| Column | Type | Constraints | Description | |
|
|
|--------|------|-------------|-------------| |
|
|
| `id` | INTEGER | PRIMARY KEY, AUTOINCREMENT | Unique user identifier | |
|
|
| `username` | TEXT | UNIQUE, NOT NULL | User's login name | |
|
|
| `password` | TEXT | NOT NULL | User's password (plain text) | |
|
|
|
|
|
### Database Operations |
|
|
|
|
|
- **Connection**: SQLite3 with `sqlite3.Row` factory for dictionary-like access |
|
|
- **Initialization**: Automatic table creation on first run |
|
|
- **Queries**: Parameterized queries to prevent SQL injection |
|
|
|
|
|
## ๐ Security Considerations |
|
|
|
|
|
### Current Implementation |
|
|
|
|
|
- โ
SQL injection protection via parameterized queries |
|
|
- โ
Session-based authentication |
|
|
- โ
CSRF protection through Flask's secret key |
|
|
- โ
Input validation and error handling |
|
|
|
|
|
### Production Recommendations |
|
|
|
|
|
- โ ๏ธ **Password Hashing**: Currently stores plain text passwords |
|
|
```python |
|
|
from werkzeug.security import generate_password_hash, check_password_hash |
|
|
|
|
|
# For registration |
|
|
hashed_password = generate_password_hash(password) |
|
|
|
|
|
# For login verification |
|
|
check_password_hash(stored_hash, provided_password) |
|
|
``` |
|
|
|
|
|
- โ ๏ธ **Environment Variables**: Move secret key to environment variables |
|
|
```python |
|
|
import os |
|
|
app.secret_key = os.environ.get('SECRET_KEY', 'fallback-secret-key') |
|
|
``` |
|
|
|
|
|
- โ ๏ธ **HTTPS**: Enable HTTPS in production |
|
|
- โ ๏ธ **Rate Limiting**: Implement login attempt limits |
|
|
- โ ๏ธ **Input Validation**: Add comprehensive input sanitization |
|
|
- โ ๏ธ **Session Security**: Configure secure session cookies |
|
|
|
|
|
### Recommended Security Enhancements |
|
|
|
|
|
```python |
|
|
# Enhanced security configuration |
|
|
app.config.update( |
|
|
SESSION_COOKIE_SECURE=True, # HTTPS only |
|
|
SESSION_COOKIE_HTTPONLY=True, # No JS access |
|
|
SESSION_COOKIE_SAMESITE='Lax', # CSRF protection |
|
|
PERMANENT_SESSION_LIFETIME=timedelta(hours=1) # Shorter sessions |
|
|
) |
|
|
``` |
|
|
|
|
|
## ๐จ Frontend Templates |
|
|
|
|
|
### Template Structure |
|
|
|
|
|
All templates extend `base.html` for consistent styling: |
|
|
|
|
|
```html |
|
|
<!-- base.html --> |
|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>{% block title %}Flask Login System{% endblock %}</title> |
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> |
|
|
</head> |
|
|
<body> |
|
|
<div class="container mt-4"> |
|
|
{% block content %}{% endblock %} |
|
|
</div> |
|
|
</body> |
|
|
</html> |
|
|
``` |
|
|
|
|
|
### Form Examples |
|
|
|
|
|
#### Login Form |
|
|
```html |
|
|
<form method="POST"> |
|
|
<div class="mb-3"> |
|
|
<label for="username" class="form-label">Username</label> |
|
|
<input type="text" class="form-control" name="username" required> |
|
|
</div> |
|
|
<div class="mb-3"> |
|
|
<label for="password" class="form-label">Password</label> |
|
|
<input type="password" class="form-control" name="password" required> |
|
|
</div> |
|
|
<div class="mb-3 form-check"> |
|
|
<input type="checkbox" class="form-check-input" name="remember"> |
|
|
<label class="form-check-label">Remember Me</label> |
|
|
</div> |
|
|
<button type="submit" class="btn btn-primary">Login</button> |
|
|
</form> |
|
|
``` |
|
|
|
|
|
## ๐ Deployment |
|
|
|
|
|
### Hugging Face Spaces |
|
|
|
|
|
The project is configured for deployment on Hugging Face Spaces: |
|
|
|
|
|
1. **Create Space**: Create a new Space on Hugging Face |
|
|
2. **Upload Files**: Push your code to the Space repository |
|
|
3. **Configuration**: Ensure `app.py` runs on port 7860 |
|
|
4. **Environment**: The Space will automatically build and deploy |
|
|
|
|
|
### Local Development |
|
|
|
|
|
```bash |
|
|
# Development mode with auto-reload |
|
|
export FLASK_ENV=development |
|
|
export FLASK_DEBUG=1 |
|
|
python app.py |
|
|
``` |
|
|
|
|
|
### Production Deployment |
|
|
|
|
|
```bash |
|
|
# Use a production WSGI server |
|
|
pip install gunicorn |
|
|
gunicorn -w 4 -b 0.0.0.0:5000 app:app |
|
|
``` |
|
|
|
|
|
## ๐ค Contributing |
|
|
|
|
|
1. Fork the repository |
|
|
2. Create a feature branch (`git checkout -b feature/amazing-feature`) |
|
|
3. Commit your changes (`git commit -m 'Add amazing feature'`) |
|
|
4. Push to the branch (`git push origin feature/amazing-feature`) |
|
|
5. Open a Pull Request |
|
|
|
|
|
### Development Guidelines |
|
|
|
|
|
- Follow PEP 8 style guidelines |
|
|
- Add comments for complex logic |
|
|
- Update documentation for new features |
|
|
- Test all functionality before submitting |
|
|
|
|
|
## ๐ License |
|
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. |
|
|
|
|
|
## ๐ Known Issues |
|
|
|
|
|
- Plain text password storage (security concern) |
|
|
- No password strength validation |
|
|
- No account recovery mechanism |
|
|
- Limited input sanitization |
|
|
|
|
|
## ๐ฎ Future Enhancements |
|
|
|
|
|
- [ ] Password hashing with bcrypt/scrypt |
|
|
- [ ] Email verification system |
|
|
- [ ] Password reset functionality |
|
|
- [ ] User profile management |
|
|
- [ ] Role-based access control |
|
|
- [ ] OAuth integration (Google, GitHub) |
|
|
- [ ] Rate limiting and brute force protection |
|
|
- [ ] Advanced session management |
|
|
- [ ] API endpoints for mobile apps |
|
|
- [ ] Unit and integration tests |
|
|
|
|
|
## ๐ Support |
|
|
|
|
|
For questions, issues, or contributions: |
|
|
|
|
|
- **Repository**: [GitHub Repository](https://github.com/yourusername/flask-login-system) |
|
|
- **Live Demo**: [Flask Login System](https://rahul23232-flask-login.hf.space/) |
|
|
- **Issues**: Use GitHub Issues for bug reports and feature requests |
|
|
|
|
|
--- |
|
|
|
|
|
**Note**: This is a demonstration project for educational purposes. For production use, implement proper security measures including password hashing, HTTPS, and comprehensive input validation. |