Update users
This commit is contained in:
parent
7ed3a4730a
commit
821cd9282a
@ -1,6 +1,6 @@
|
||||
from fastapi import FastAPI, HTTPException, Header, Depends
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
from datetime import datetime
|
||||
from sqlalchemy.orm import Session
|
||||
@ -40,9 +40,12 @@ class UserRegister(BaseModel):
|
||||
password: str
|
||||
|
||||
class UserLogin(BaseModel):
|
||||
email: str
|
||||
username_or_email: str = Field(..., alias='usernameOrEmail')
|
||||
password: str
|
||||
|
||||
class Config:
|
||||
populate_by_name = True
|
||||
|
||||
class AuthResponse(BaseModel):
|
||||
user: UserResponse
|
||||
token: str
|
||||
@ -172,16 +175,18 @@ def register(user_data: UserRegister, db: Session = Depends(get_db)):
|
||||
|
||||
@app.post("/login", response_model=AuthResponse)
|
||||
def login(user_data: UserLogin, db: Session = Depends(get_db)):
|
||||
"""Login a user"""
|
||||
"""Login a user with username or email"""
|
||||
password_hash = hash_password(user_data.password)
|
||||
|
||||
# Try to find user by email or username
|
||||
user = db.query(db_models.User).filter(
|
||||
db_models.User.email == user_data.email,
|
||||
((db_models.User.email == user_data.username_or_email) |
|
||||
(db_models.User.username == user_data.username_or_email)),
|
||||
db_models.User.password_hash == password_hash
|
||||
).first()
|
||||
|
||||
if not user:
|
||||
raise HTTPException(status_code=401, detail="Invalid email or password")
|
||||
raise HTTPException(status_code=401, detail="Invalid credentials")
|
||||
|
||||
# Create new token
|
||||
token_str = str(uuid.uuid4())
|
||||
|
||||
@ -250,7 +250,7 @@ function App() {
|
||||
<div className="sidebar-header">
|
||||
<h2 className="sidebar-title">✓ Tasko</h2>
|
||||
<div className="user-info">
|
||||
<span className="username">{user.username}</span>
|
||||
<span className="username">Hello, {user.username}!</span>
|
||||
<button onClick={handleLogout} className="logout-btn" title="Logout">
|
||||
🚪
|
||||
</button>
|
||||
|
||||
@ -6,6 +6,7 @@ const API_URL = 'http://localhost:8001'
|
||||
function Auth({ onLogin }) {
|
||||
const [isLogin, setIsLogin] = useState(true)
|
||||
const [username, setUsername] = useState('')
|
||||
const [usernameOrEmail, setUsernameOrEmail] = useState('')
|
||||
const [email, setEmail] = useState('')
|
||||
const [password, setPassword] = useState('')
|
||||
const [error, setError] = useState('')
|
||||
@ -16,7 +17,7 @@ function Auth({ onLogin }) {
|
||||
setError('')
|
||||
|
||||
if (isLogin) {
|
||||
if (!email.trim() || !password.trim()) {
|
||||
if (!usernameOrEmail.trim() || !password.trim()) {
|
||||
setError('Please fill in all fields')
|
||||
return
|
||||
}
|
||||
@ -32,7 +33,7 @@ function Auth({ onLogin }) {
|
||||
try {
|
||||
const endpoint = isLogin ? '/login' : '/register'
|
||||
const payload = isLogin
|
||||
? { email, password }
|
||||
? { usernameOrEmail: usernameOrEmail, password }
|
||||
: { username, email, password }
|
||||
|
||||
const response = await fetch(`${API_URL}${endpoint}`, {
|
||||
@ -104,6 +105,18 @@ function Auth({ onLogin }) {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{isLogin ? (
|
||||
<div className="form-group">
|
||||
<label>Username or Email</label>
|
||||
<input
|
||||
type="text"
|
||||
value={usernameOrEmail}
|
||||
onChange={(e) => setUsernameOrEmail(e.target.value)}
|
||||
placeholder="Enter your username or email"
|
||||
disabled={loading}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div className="form-group">
|
||||
<label>Email</label>
|
||||
<input
|
||||
@ -114,6 +127,7 @@ function Auth({ onLogin }) {
|
||||
disabled={loading}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="form-group">
|
||||
<label>Password</label>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user