다음 인증을 사용하여 Next.js에서 인증 구현
22955 단어 nextjsjavascriptwebdev
다음 인증이란 무엇입니까?
NextAuth.js는 Next.js 응용 프로그램을 위한 완전한 오픈 소스 인증 솔루션입니다. 클라이언트 쪽에서 사용자에 액세스할 수 있는 기본 제공 후크가 있습니다.
시작하기
yarn create next-app
하여 다음 js 상용구 코드yarn add next-auth
또는 npm install next-auth
를 실행하여 next-auth를 설치할 수 있습니다. pages/api/auth/[...nextauth].js
파일을 편집하여 인증을 위한 API 경로를 생성할 수 있습니다.import NextAuth from "next-auth"
import GithubProvider from "next-auth/providers/github"
export const authOptions = {
// Configure one or more authentication providers
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
// ...add more providers here
],
}
export default NextAuth(authOptions)
자바스크립트
pages/_app.jsx
를 SessionProvider로 래핑하여 클라이언트 측에서 사용자에 액세스할 수 있습니다.import { SessionProvider } from "next-auth/react"
export default function App({
Component,
pageProps: { session, ...pageProps },
}) {
return (
<SessionProvider session={session}>
<Component {...pageProps} />
</SessionProvider>
)
}
자바스크립트
pages/index.js
import { Center, VStack, Text, Button } from '@chakra-ui/react';
import { useSession, signIn } from 'next-auth/react';
import React from 'react';
export default function Home() {
const { data } = useSession();
return (
<Center height="100%" my={'10rem'}>
<VStack>
<Text fontSize={'2xl'}>
Current User: {data?.user?.email || 'None'}{' '}
</Text>
{!data?.user && <Button onClick={() => signIn()}>Login</Button>}
</VStack>
</Center>
);
}
자바스크립트
pages/auth.js
)를 생성해 보겠습니다import {
Box,
Center,
Container,
Flex,
Icon,
VStack,
Button,
} from '@chakra-ui/react';
import {
getProviders,
getSession,
GetSessionParams,
signIn,
useSession,
} from 'next-auth/react';
import { FcGoogle } from 'react-icons/fc';
import { FaDiscord, FaGithub } from 'react-icons/fa';
import { GetServerSideProps } from 'next';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
export default function SignIn({ providers }) {
const router = useRouter();
const user = useSession();
useEffect(() => {
// if (router.query.callbackUrl) {
// router.push(router.query.callbackUrl as string);
// }
if (user?.data?.user) {
router.push('/');
}
});
let icons = [
{
name: 'Google',
icon: FcGoogle,
},
{
name: 'Github',
icon: FaGithub,
},
{
name: 'Discord',
icon: FaDiscord,
},
];
return (
<Flex h="100vh" alignItems={'center'} justifyContent="center">
<Box
border="1px"
borderColor="gray.200"
p={4}
rounded="xl"
// translateY={'50%'}
>
<VStack>
{Object.values(providers).map((provider: any) => (
<Button
leftIcon={
<Icon
as={
icons.find(
(i) =>
i.name.toLowerCase() ===
provider.name.toLowerCase()
).icon
}
/>
}
onClick={async () => signIn(provider.id)}
key={provider.id}
>{`Sign in with ${provider.name}`}</Button>
))}
</VStack>
</Box>
</Flex>
);
}
export const getServerSideProps: GetServerSideProps = async (context) => {
const session = await getSession(context);
const providers = await getProviders();
// console.log(context.query);
if (session) {
return {
redirect: {
destination: (context?.query?.callbackUrl as string) || '/',
permanent: false,
},
};
}
return {
props: { providers },
};
};
자바스크립트
useSession()
후크를 사용하여 클라이언트 측에서 사용자 세부 정보를 얻거나 서버 측getSession()
를 사용할 수 있습니다.고객 입장에서
import { useSession } from "next-auth/react"
export default function Component() {
const { data: session, status } = useSession()
if (status === "authenticated") {
return <p>Signed in as {session.user.email}</p>
}
return <a href="/api/auth/signin">Sign in</a>
}
서버 측
async function myFunction() {
const session = await getSession()
/* ... */
}
yarn dev
dev 서버가 실행되기 시작할 수 있습니다결론
P.S:- Vultr (이 링크를 사용하여 등록하면 $100 크레딧을 받을 수 있습니다.)는 훌륭한 호스팅 선택입니다.
Reference
이 문제에 관하여(다음 인증을 사용하여 Next.js에서 인증 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/raghavmri/implementing-authentication-in-nextjs-using-next-auth-1g97텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)