React 및 GraphQL - 12를 사용하여 Reddit 클론 만들기
14474 단어 reactredditclonetypescriptgraphql
이 블로그 게시물은 원래 내 블로그 사이트에 게시되었으며 여기에서 찾을 수 있습니다.
이전 게시물에서 말했듯이 여기에서 2개의 시나리오를 관리해야 합니다.
토큰 오류를 처리하기 위해 아래 코드 라인을 추가하십시오. 여기서는 상태를 사용합니다.
const [tokenError, setTokenError] = useState("");
그런 다음 토큰 오류가 있는지 확인하기 위해 아래 코드를 추가합니다. 그렇다면 우리는. 상태에 추가합니다.
// take out toErrorMap first
const errorMap = toErrorMap(response.data.changePassword.errors);
if ("token" in errorMap) {
// this is because we defined filed as token in user.ts in backend
setTokenError(errorMap.token);
}
이 오류를 표시해 보겠습니다.
{
tokenError ? <Box color="red">{tokenError}</Box> : null;
}
이 순간을 추가하려고 하면
404
오류가 발생합니다. 여기서 문제는 우리가 이것을 withUrqlClient
로 래핑하지 않았다는 것입니다. 구성 요소를 덮어 보겠습니다.export default withUrqlClient(createUrqlClient)(ChangePassword);
이제 이 토큰을 사용하면 백엔드에서 토큰을 삭제해야 합니다. 다음에 해보자.
// in resolvers/user.ts file
// first get the key out
const key = FORGET_PASSWORD_PREFIX + token;
const userId = await redis.get(key);
// then delete the key
await redis.del(key);
req.session.userId = user.id;
이제 토큰을 두 번째로 사용하여 암호를 변경하려고 하면 토큰 만료 오류가 발생합니다. 시원한. 이제 모두 잘 작동합니다.
자, 이제 토큰이 만료되면 새 토큰을 가져와야 합니다. 추가해 보겠습니다. 먼저 새 토큰 페이지를 가져오는 링크를 추가합니다.
// update code to below code block in [token].tsx file.
{
tokenError ? (
<Box>
<Box color="red">{tokenError}</Box>
<NextLink href="/forgot-password">
<Link>Click here to get a new token.</Link>
</NextLink>
</Box>
) : null;
}
링크를 클릭하면
forgot-password
페이지로 이동합니다. 해당 페이지를 빠르게 추가해 보겠습니다.import React from "react";
const ForgotPassword: React.FC<{}> = ({}) => {
return <div>Forgot Password</div>;
};
export default ForgotPassword;
이것은 또한
Login
페이지에 추가해야 합니다.// under to inputfield add this code
<Flex mt={2}>
<NextLink href="/forgot-password">
<Link ml="auto">forgot password?</Link>
</NextLink>
</Flex>
이
forgot-passward
페이지의 마지막으로 사용자가 이메일 주소를 삽입해야 합니다. Login
페이지에서 복사하여 여기에 추가해 보겠습니다. 또한 forgot-password
에 대한 돌연변이를 생성해야 합니다. 이것은 부울 값만 반환합니다.mutation ForgotPassword($email: String!) {
forgotPassword(email: $email)
}
forgot-password.tsx
페이지에서 state
를 사용하여 성공 메시지를 설정합니다.const [complete, setComplete] = userState(false);
다음은
forgot-password.tsx
파일의 전체 코드입니다.const [complete, setComplete] = userState(false);
const [, forgotPassword] = useForgotPasswordMutation();
return (
<Wrapper variant="small">
<Formik
initialValues={{ email: "" }}
onSubmit={async (values) => {
await forgotPassword(values);
setComplete(true);
}}
>
{({ isSubmitting }) =>
complete ? (
<Box>we sent a password reset link to your email. Please check.</Box>
) : (
<Form>
<InputField
name="email"
placeholder="email"
label="Email"
type="email"
/>
<Button
isLoading={isSubmitting}
mt={4}
type="submit"
colorScheme="teal"
>
Forgot Password
</Button>
</Form>
)
}
</Formik>
</Wrapper>
);
이 시점에서 우리는 이 애플리케이션의 사용자 관리 및 인증 작업에 대한 거의 모든 작업을 수행했습니다. 다음 블로그 게시물에서 Reddit 클론에 게시물을 추가하는 작업을 해 보겠습니다.
읽어주셔서 감사합니다. 이와 관련하여 질문할 사항이 있으면 여기에 댓글을 남겨주세요. 또한 내 이해에 따라 이것을 썼습니다. 따라서 잘못된 점이 있으면 주저하지 말고 저를 수정하십시오. 정말 감사합니다.
오늘의 친구들을 위한 것입니다. 곧 봐요. 고맙습니다.
참조:
이 기사 시리즈는 . 이것은 놀라운 자습서이며 확인하는 것이 좋습니다.
기본 이미지credit
Reference
이 문제에 관하여(React 및 GraphQL - 12를 사용하여 Reddit 클론 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rasikag/creating-a-reddit-clone-using-react-and-graphql-12-3mc6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)