Spaces:
Running
Running
| import React, { useState } from 'react'; | |
| import axios from 'axios'; | |
| const AuthForm = ({ type = "login" }) => { | |
| const [username, setUsername] = useState(''); | |
| const [password, setPassword] = useState(''); | |
| const [msg, setMsg] = useState(''); | |
| const handleSubmit = async (e) => { | |
| e.preventDefault(); | |
| try { | |
| const endpoint = type === 'signup' ? '/signup' : '/login'; | |
| const res = await axios.post(`https://your-hf-space.hf.space${endpoint}`, { | |
| username, | |
| password, | |
| }); | |
| if (type === 'login') { | |
| localStorage.setItem('token', res.data.token); | |
| window.location.href = "/search"; | |
| } else { | |
| setMsg("Account created! You can now login."); | |
| } | |
| } catch (err) { | |
| setMsg(err.response?.data?.message || 'Something went wrong'); | |
| } | |
| }; | |
| return ( | |
| <div className="max-w-md mx-auto p-6 bg-white rounded-2xl shadow-lg"> | |
| <h2 className="text-2xl font-bold mb-4">{type === 'signup' ? 'Sign Up' : 'Login'}</h2> | |
| <form onSubmit={handleSubmit} className="space-y-4"> | |
| <input type="text" placeholder="Username" | |
| className="w-full px-4 py-2 border rounded-lg" | |
| value={username} onChange={e => setUsername(e.target.value)} required /> | |
| <input type="password" placeholder="Password" | |
| className="w-full px-4 py-2 border rounded-lg" | |
| value={password} onChange={e => setPassword(e.target.value)} required /> | |
| <button className="w-full bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700"> | |
| {type === 'signup' ? 'Sign Up' : 'Login'} | |
| </button> | |
| {msg && <p className="text-red-500">{msg}</p>} | |
| </form> | |
| </div> | |
| ); | |
| }; | |
| export default AuthForm; | |