diff --git a/pages/auth/signin.tsx b/pages/auth/signin.tsx new file mode 100644 index 0000000..0326411 --- /dev/null +++ b/pages/auth/signin.tsx @@ -0,0 +1,105 @@ +// pages/auth/signin.js +import { getCsrfToken, signIn } from 'next-auth/react'; +import React, { useState } from 'react'; +import { useRouter } from 'next/router'; +import Layout from '../../components/layout'; + +export default function SignIn({ csrfToken }) { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const router = useRouter(); + + const handleSubmit = async (e) => { + e.preventDefault(); + + // Perform client-side validation if needed + if (!email || !password) { + setError('All fields are required'); + return; + } + + // Clear any existing errors + setError(''); + + // Attempt to sign in + const result = await signIn('credentials', { + redirect: false, + username: email, + password, + callbackUrl: '/', + }); + + // Check if there was an error + if (result.error) { + setError(result.error); + } + + // Redirect to the home page or callbackUrl on success + if (result.ok && result.url) { + router.push(result.url); + } + }; + + return ( + +
+
+
+
+ {/* Button to sign in with Google */} + +
+
+
+ +
+ + setEmail(e.target.value)} + className="border p-2 w-full" + /> +
+
+ + setPassword(e.target.value)} + className="border p-2 w-full" + /> +
+ {error &&
{error}
} + + +
+
+
+
+
+
+ ); +} + +// This gets called on every request +export async function getServerSideProps(context) { + return { + props: { + csrfToken: await getCsrfToken(context), + }, + }; +}