simple login implementation
This commit is contained in:
parent
aa3e81de27
commit
120106bfbc
@ -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>
|
||||
|
@ -40,12 +40,22 @@ export type File = {
|
||||
size: Scalars["Int"];
|
||||
};
|
||||
|
||||
/** Result of a login */
|
||||
export type LoginResut = {
|
||||
__typename?: "LoginResut";
|
||||
/** If the login was successful */
|
||||
successful: Scalars["Boolean"];
|
||||
/** JWT token if login was successful */
|
||||
token?: Maybe<Scalars["String"]>;
|
||||
};
|
||||
|
||||
export type RootMutation = {
|
||||
__typename?: "RootMutation";
|
||||
copy?: Maybe<File>;
|
||||
createDir: Directory;
|
||||
delete?: Maybe<Scalars["String"]>;
|
||||
deleteDir: Scalars["String"];
|
||||
login: LoginResut;
|
||||
move?: Maybe<File>;
|
||||
};
|
||||
|
||||
@ -71,6 +81,12 @@ export type RootMutationDeleteDirArgs = {
|
||||
};
|
||||
|
||||
|
||||
export type RootMutationLoginArgs = {
|
||||
username: Scalars["String"];
|
||||
password: Scalars["String"];
|
||||
};
|
||||
|
||||
|
||||
export type RootMutationMoveArgs = {
|
||||
src: Scalars["ID"];
|
||||
dest: Scalars["ID"];
|
||||
@ -158,6 +174,20 @@ export type GetFileQuery = (
|
||||
)> }
|
||||
);
|
||||
|
||||
export type LoginMutationVariables = Exact<{
|
||||
username: Scalars["String"];
|
||||
password: Scalars["String"];
|
||||
}>;
|
||||
|
||||
|
||||
export type LoginMutation = (
|
||||
{ __typename?: "RootMutation" }
|
||||
& { login: (
|
||||
{ __typename?: "LoginResut" }
|
||||
& Pick<LoginResut, "token" | "successful">
|
||||
) }
|
||||
);
|
||||
|
||||
export type MoveMutationVariables = Exact<{
|
||||
src: Scalars["ID"];
|
||||
dest: Scalars["ID"];
|
||||
@ -357,6 +387,41 @@ export function useGetFileLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<Ge
|
||||
export type GetFileQueryHookResult = ReturnType<typeof useGetFileQuery>;
|
||||
export type GetFileLazyQueryHookResult = ReturnType<typeof useGetFileLazyQuery>;
|
||||
export type GetFileQueryResult = Apollo.QueryResult<GetFileQuery, GetFileQueryVariables>;
|
||||
export const LoginDocument = gql`
|
||||
mutation Login($username: String!, $password: String!) {
|
||||
login(username: $username, password: $password) {
|
||||
token
|
||||
successful
|
||||
}
|
||||
}
|
||||
`
|
||||
export type LoginMutationFn = Apollo.MutationFunction<LoginMutation, LoginMutationVariables>;
|
||||
|
||||
/**
|
||||
* __useLoginMutation__
|
||||
*
|
||||
* To run a mutation, you first call `useLoginMutation` within a React component and pass it any options that fit your needs.
|
||||
* When your component renders, `useLoginMutation` returns a tuple that includes:
|
||||
* - A mutate function that you can call at any time to execute the mutation
|
||||
* - An object with fields that represent the current status of the mutation's execution
|
||||
*
|
||||
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
|
||||
*
|
||||
* @example
|
||||
* const [loginMutation, { data, loading, error }] = useLoginMutation({
|
||||
* variables: {
|
||||
* username: // value for 'username'
|
||||
* password: // value for 'password'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useLoginMutation(baseOptions?: Apollo.MutationHookOptions<LoginMutation, LoginMutationVariables>) {
|
||||
const options = {...defaultOptions, ...baseOptions}
|
||||
return Apollo.useMutation<LoginMutation, LoginMutationVariables>(LoginDocument, options)
|
||||
}
|
||||
export type LoginMutationHookResult = ReturnType<typeof useLoginMutation>;
|
||||
export type LoginMutationResult = Apollo.MutationResult<LoginMutation>;
|
||||
export type LoginMutationOptions = Apollo.BaseMutationOptions<LoginMutation, LoginMutationVariables>;
|
||||
export const MoveDocument = gql`
|
||||
mutation move($src: ID!, $dest: ID!) {
|
||||
move(src: $src, dest: $dest) {
|
||||
|
File diff suppressed because it is too large
Load Diff
6
src/graphql/login.graphql
Normal file
6
src/graphql/login.graphql
Normal file
@ -0,0 +1,6 @@
|
||||
mutation Login($username: String!, $password: String!){
|
||||
login(username:$username,password:$password){
|
||||
token
|
||||
successful
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user