feat: added csrftoken at addbot

This commit is contained in:
Junseo Park 2021-02-17 15:56:37 +09:00
parent 84147f60d5
commit 53ded6d158

View File

@ -9,8 +9,11 @@ import { parseCookie, redirectTo } from '@utils/Tools'
import { AddBotSubmitSchema } from '@utils/Yup' import { AddBotSubmitSchema } from '@utils/Yup'
import { categories, library } from '@utils/Constants' import { categories, library } from '@utils/Constants'
import { User } from '@types' import { User } from '@types'
import { getToken } from '@utils/Csrf'
import Fetch from '@utils/Fetch'
const CheckBox = dynamic(() => import('@components/Form/CheckBox')) const CheckBox = dynamic(() => import('@components/Form/CheckBox'))
const CsrfToken = dynamic(() => import('@components/Form/CsrfToken'))
const Label = dynamic(() => import('@components/Form/Label')) const Label = dynamic(() => import('@components/Form/Label'))
const Input = dynamic(() => import('@components/Form/Input')) const Input = dynamic(() => import('@components/Form/Input'))
const Divider = dynamic(() => import('@components/Divider')) const Divider = dynamic(() => import('@components/Divider'))
@ -24,12 +27,19 @@ const Container = dynamic(() => import('@components/Container'))
const Message = dynamic(() => import('@components/Message')) const Message = dynamic(() => import('@components/Message'))
const SEO = dynamic(() => import('@components/SEO')) const SEO = dynamic(() => import('@components/SEO'))
const AddBot:NextPage<AddBotProps> = ({ logged, user }) => { const AddBot:NextPage<AddBotProps> = ({ logged, user, csrfToken }) => {
const router = useRouter() const router = useRouter()
function toLogin() { function toLogin() {
localStorage.redirectTo = window.location.href localStorage.redirectTo = window.location.href
redirectTo(router, 'login') redirectTo(router, 'login')
} }
async function submitBot(value) {
const res = await Fetch(`/bots/${value.id}`, { method: 'POST', body: JSON.stringify(value), headers: { 'content-type': 'application/json' } })
console.log(res)
return res
}
if(!logged) { if(!logged) {
toLogin() toLogin()
return <SEO title='새로운 봇 추가하기' description='자신의 봇을 한국 디스코드봇 리스트에 등록하세요.'/> return <SEO title='새로운 봇 추가하기' description='자신의 봇을 한국 디스코드봇 리스트에 등록하세요.'/>
@ -51,10 +61,13 @@ const AddBot:NextPage<AddBotProps> = ({ logged, user }) => {
discord: '', discord: '',
category: [], category: [],
intro: '', intro: '',
desc: '' desc: '',
_csrf: csrfToken
}} }}
validationSchema={AddBotSubmitSchema} validationSchema={AddBotSubmitSchema}
onSubmit={(values) => { alert(JSON.stringify(values)) }}> onSubmit={async(values) => {
submitBot(values)
}}>
{({ errors, touched, values, setFieldTouched, setFieldValue }) => ( {({ errors, touched, values, setFieldTouched, setFieldValue }) => (
<Form> <Form>
<div className='py-5'> <div className='py-5'>
@ -142,14 +155,15 @@ const AddBot:NextPage<AddBotProps> = ({ logged, user }) => {
} }
export const getServerSideProps = async (ctx: NextPageContext) => { export const getServerSideProps = async (ctx: NextPageContext) => {
const parsed = parseCookie(ctx) const parsed = parseCookie(ctx.req)
const user = await get.Authorization(parsed?.token) const user = await get.Authorization(parsed?.token)
return { props: { logged: !!user, user: await get.user.load(user || '') } } return { props: { logged: !!user, user: await get.user.load(user || ''), csrfToken: getToken(ctx.req, ctx.res) } }
} }
interface AddBotProps { interface AddBotProps {
logged: boolean, logged: boolean
user: User user: User
csrfToken: string
} }
export default AddBot export default AddBot