simple login implementation

This commit is contained in:
2021-09-14 16:22:54 +02:00
parent aa3e81de27
commit 120106bfbc
4 changed files with 1180 additions and 968 deletions

View File

@@ -1,19 +1,71 @@
import React from "react"
import { useState } from "react"
import { RouteComponentProps } from "react-router-dom"
import { useLoginMutation } from "../generated/graphql"
const Login: React.FC<RouteComponentProps> = (props) => {
const [username,setUsername] = useState("")
const [password,setPassword] = useState("")
const [loginFailed,setLoginFailed] = useState(false)
const [loginMutation] = useLoginMutation()
const Login: React.FC = () => {
return (
<div className="flex justify-center h-screen items-center">
<div>
<form onSubmit={(e)=>{
<form onSubmit={async (e)=>{
e.preventDefault()
const result = await loginMutation({
variables:{
username: username,
password: password
}
})
const successful = result.data?.login.successful
if (!successful){
setLoginFailed(true)
return
}
const token = result.data?.login.token
if (token){
const response = await fetch("/api/cookie",{
method:"POST",
body: token
})
if (response.ok){
// Login successful
props.history.push("/f/")
}else{
setLoginFailed(true)
}
}
}} >
{loginFailed &&
<div className="text-red-600 mb-4" >
<div className="font-bold" >
Login failed
</div>
<div>
Wrong username or password
</div>
</div>
}
<input type="text" placeholder="Username"
className="block my-2 text-input"
required
onChange={(e)=>setUsername(e.target.value)}
/>
<input type="password" placeholder="Password"
className="block my-2 text-input"
required
onChange={(e)=>setPassword(e.target.value)}
/>
<button className="block my-2 w-full" >Login</button>
</form>