verify-email.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { useEffect } from "react";
  2. import { Flex } from "reflexbox/styled-components";
  3. import decode from "jwt-decode";
  4. import { NextPage } from "next";
  5. import cookie from "js-cookie";
  6. import { useStoreActions } from "../store";
  7. import AppWrapper from "../components/AppWrapper";
  8. import { H2 } from "../components/Text";
  9. import { TokenPayload } from "../types";
  10. import Icon from "../components/Icon";
  11. import { Colors } from "../consts";
  12. import Footer from "../components/Footer";
  13. interface Props {
  14. token?: string;
  15. }
  16. const VerifyEmail: NextPage<Props> = ({ token }) => {
  17. const addAuth = useStoreActions(s => s.auth.add);
  18. useEffect(() => {
  19. if (token) {
  20. cookie.set("token", token, { expires: 7 });
  21. const decoded: TokenPayload = decode(token);
  22. addAuth(decoded);
  23. }
  24. }, []);
  25. return (
  26. <AppWrapper>
  27. <Flex flex="1 1 100%" justifyContent="center" mt={4}>
  28. <Icon
  29. name={token ? "check" : "x"}
  30. size={26}
  31. stroke={token ? Colors.CheckIcon : Colors.TrashIcon}
  32. mr={3}
  33. mt={1}
  34. />
  35. <H2 textAlign="center" normal>
  36. {token
  37. ? "Email address verified successfully."
  38. : "Couldn't verify the email address."}
  39. </H2>
  40. </Flex>
  41. <Footer />
  42. </AppWrapper>
  43. );
  44. };
  45. VerifyEmail.getInitialProps = async ctx => {
  46. return { token: (ctx?.req as any)?.token };
  47. };
  48. export default VerifyEmail;