feat: 유저 세션 체크 로직 추가

This commit is contained in:
yoosangwook 2024-08-22 10:10:33 +09:00
parent 813c756727
commit 35a7f28ac9
20 changed files with 85 additions and 45 deletions

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Archive from '@/components/community/Archive' import Archive from '@/components/community/Archive'
import { initCheck } from '@/util/session-util'
export default async function CommunityArchivePage() {
await initCheck()
export default function CommunityArchivePage() {
return ( return (
<> <>
<Hero title="자료 다운로드" /> <Hero title="자료 다운로드" />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Faq from '@/components/community/Faq' import Faq from '@/components/community/Faq'
import { initCheck } from '@/util/session-util'
export default async function CommunityFaqPage() {
await initCheck()
export default function CommunityFaqPage() {
return ( return (
<> <>
<Hero title="FAQ" /> <Hero title="FAQ" />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Notice from '@/components/community/Notice' import Notice from '@/components/community/Notice'
import { initCheck } from '@/util/session-util'
export default async function CommunityNoticePage() {
await initCheck()
export default function CommunityNoticePage() {
return ( return (
<> <>
<Hero title="공지사항" /> <Hero title="공지사항" />

View File

@ -1,6 +1,9 @@
import Intro from '@/components/Intro' import Intro from '@/components/Intro'
import { initCheck } from '@/util/session-util'
export default async function IntroPage() {
await initCheck()
export default function IntroPage() {
return ( return (
<> <>
<div className="container mx-auto p-4 m-4 border"> <div className="container mx-auto p-4 m-4 border">

View File

@ -5,6 +5,7 @@ import { LocaleProvider } from './LocaleProvider'
export default function LocaleLayout({ children }) { export default function LocaleLayout({ children }) {
const locale = useCurrentLocale() const locale = useCurrentLocale()
return ( return (
<> <>
<LocaleProvider locale={locale} fallback={''}> <LocaleProvider locale={locale} fallback={''}>

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Plan from '@/components/management/Plan' import Plan from '@/components/management/Plan'
import { initCheck } from '@/util/session-util'
export default async function ManagementPlanPage() {
await initCheck()
export default function ManagementPlanPage() {
return ( return (
<> <>
<Hero title="도면관리" /> <Hero title="도면관리" />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Stuff from '@/components/management/Stuff' import Stuff from '@/components/management/Stuff'
import { initCheck } from '@/util/session-util'
export default async function ManagementStuffPage() {
await initCheck()
export default function ManagementStuffPage() {
return ( return (
<> <>
<Hero title="물건관리" /> <Hero title="물건관리" />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Company from '@/components/master/Company' import Company from '@/components/master/Company'
import { initCheck } from '@/util/session-util'
export default async function MasterCompanyPage() {
await initCheck()
export default function MasterCompanyPage() {
return ( return (
<> <>
<Hero title="회사정보 조회" /> <Hero title="회사정보 조회" />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Price from '@/components/master/Price' import Price from '@/components/master/Price'
import { initCheck } from '@/util/session-util'
export default async function MasterPricePage() {
await initCheck()
export default function MasterPricePage() {
return ( return (
<> <>
<Hero title="가격 마스터 조회" /> <Hero title="가격 마스터 조회" />

View File

@ -1,6 +1,6 @@
import MainPage from '@/components/Main'
import { getSession } from '@/lib/authActions' import { getSession } from '@/lib/authActions'
import { getCurrentLocale } from '@/locales/server' import { getCurrentLocale } from '@/locales/server'
import MainPage from '@/components/Main'
export default async function page() { export default async function page() {
const session = await getSession() const session = await getSession()

View File

@ -1,6 +1,14 @@
import Playground from '@/components/Playground' import Playground from '@/components/Playground'
import { initCheck } from '@/util/session-util'
export default async function PlaygroundPage() {
// const { session } = await checkSession()
// if (!session.isLoggedIn) {
// redirect('/login')
// }
await initCheck()
export default function PlaygroundPage() {
return ( return (
<> <>
<Playground /> <Playground />

View File

@ -1,7 +1,10 @@
import Hero from '@/components/Hero' import Hero from '@/components/Hero'
import Roof from '@/components/Roof' import Roof from '@/components/Roof'
import { initCheck } from '@/util/session-util'
export default async function RoofPage() {
await initCheck()
export default function RoofPage() {
return ( return (
<> <>
<Hero title="Drawing on canvas 2D Roof" /> <Hero title="Drawing on canvas 2D Roof" />

View File

@ -1,17 +1,9 @@
'use client'
import Roof2 from '@/components/Roof2' import Roof2 from '@/components/Roof2'
import { textState } from '@/store/canvasAtom'
import { useEffect } from 'react'
import { useRecoilState } from 'recoil'
import RoofSelect from '@/app/[locale]/roof2/RoofSelect' import RoofSelect from '@/app/[locale]/roof2/RoofSelect'
import { initCheck } from '@/util/session-util'
export default function Roof2Page() { export default async function Roof2Page() {
const [text, setText] = useRecoilState(textState) await initCheck()
useEffect(() => {
console.log(text)
}, [])
return ( return (
<> <>

View File

@ -1,3 +1,5 @@
'use client'
import { useCanvas } from '@/hooks/useCanvas' import { useCanvas } from '@/hooks/useCanvas'
import { useEffect, useState, useRef } from 'react' import { useEffect, useState, useRef } from 'react'
import { Mode, useMode } from '@/hooks/useMode' import { Mode, useMode } from '@/hooks/useMode'

View File

@ -7,7 +7,6 @@ import 'ag-grid-community/styles/ag-grid.css'
import 'ag-grid-community/styles/ag-theme-quartz.css' import 'ag-grid-community/styles/ag-theme-quartz.css'
export default function QGrid(props) { export default function QGrid(props) {
console.log('QGrid props:', props)
const { gridData, gridColumns, isPageable = true } = props const { gridData, gridColumns, isPageable = true } = props
const [count, setCount] = useState(0) const [count, setCount] = useState(0)
const [clickedCount, setClickedCount] = useState(0) const [clickedCount, setClickedCount] = useState(0)

View File

@ -20,7 +20,8 @@ export async function getSession() {
console.log('session:', session) console.log('session:', session)
if (!session.isLoggedIn) { if (!session.isLoggedIn) {
session.isLoggedIn = defaultSession.isLoggedIn // session.isLoggedIn = defaultSession.isLoggedIn
session.isLoggedIn = false
} }
return session return session
@ -35,24 +36,20 @@ export async function login(formData) {
console.log('id:', userId) console.log('id:', userId)
console.log('password:', password) console.log('password:', password)
// const user = { // const loginUser = await getUserByIdAndPassword({ userId, password })
// id: 1, const loginUser = {
// name: 'jinsoo Kim', id: 1,
// email: 'jinsoo.kim@example.com', userId: 'test123',
// } name: 'jinsoo Kim',
const loginUser = await getUserByIdAndPassword({ userId, password }) email: 'jinsoo.kim@example.com',
console.log('loginUser:', loginUser) }
if (!loginUser) { if (!loginUser) {
throw Error('Wrong Credentials!') throw Error('Wrong Credentials!')
} }
// session.id = user.id session.name = loginUser.USER_ID
// session.email = user.email session.email = loginUser.SALE_STORE_ID
session.userId = loginUser.USER_ID
session.saleStoreId = loginUser.SALE_STORE_ID
session.name = loginUser.NAME
session.mail = loginUser.MAIL
session.isLoggedIn = true session.isLoggedIn = true
console.log('session:', session) console.log('session:', session)

View File

@ -1,10 +1,4 @@
export const defaultSession = { export const defaultSession = {}
userId: null,
saleStoreId: null,
name: null,
mail: null,
isLoggedIn: false,
}
export const sessionOptions = { export const sessionOptions = {
password: process.env.SESSION_SECRET, password: process.env.SESSION_SECRET,

View File

@ -1,5 +1,7 @@
'use server' 'use server'
import { getSession } from './authActions'
const { PrismaClient } = require('@prisma/client') const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient() const prisma = new PrismaClient()
@ -29,3 +31,11 @@ export async function getUsers() {
}, },
}) })
} }
export async function checkSession() {
const session = await getSession()
return {
session,
}
}

View File

@ -30,7 +30,7 @@ const CanvasWithContextMenu = forwardRef(({ canvasProps }, ref) => {
document.addEventListener('click', handleOutsideClick) document.addEventListener('click', handleOutsideClick)
return () => { return () => {
canvasProps.upperCanvasEl.removeEventListener('contextmenu', handleContextMenu) // canvasProps.upperCanvasEl.removeEventListener('contextmenu', handleContextMenu)
document.removeEventListener('click', handleClick) document.removeEventListener('click', handleClick)
document.removeEventListener('click', handleOutsideClick) document.removeEventListener('click', handleOutsideClick)
} }

10
src/util/session-util.js Normal file
View File

@ -0,0 +1,10 @@
import { checkSession } from '@/lib/user'
import { redirect } from 'next/navigation'
export const initCheck = async () => {
const { session } = await checkSession()
if (!session.isLoggedIn) {
redirect('/login')
}
}