fix: frontend custom server 삭제, 회원가입 수정

This commit is contained in:
shinmj
2021-12-29 14:00:24 +09:00
parent 5582834ab7
commit 9123b92e92
10 changed files with 97 additions and 90 deletions

View File

@@ -1,5 +1,6 @@
package org.egovframe.cloud.userservice.api.user.dto; package org.egovframe.cloud.userservice.api.user.dto;
import java.util.Objects;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.egovframe.cloud.common.domain.Role; import org.egovframe.cloud.common.domain.Role;
@@ -64,6 +65,11 @@ public class UserJoinRequestDto {
*/ */
private String token; private String token;
public Boolean isProvider() {
return Objects.nonNull(provider) && !"".equals(provider) & !"undefined".equals(provider)
&& Objects.nonNull(token) && !"".equals(token) && !"undefined".equals(token);
}
/** /**
* UserSaveRequestDto 의 필드 값을 User Entity 빌더를 사용하여 주입 후 User를 리턴한다. * UserSaveRequestDto 의 필드 값을 User Entity 빌더를 사용하여 주입 후 User를 리턴한다.
* UserSaveRequestDto 가 가지고 있는 User 의 필드만 세팅할 수 있게 된다. * UserSaveRequestDto 가 가지고 있는 User 의 필드만 세팅할 수 있게 된다.

View File

@@ -319,7 +319,7 @@ public class UserService extends AbstractService implements UserDetailsService {
User user = requestDto.toEntity(passwordEncoder); User user = requestDto.toEntity(passwordEncoder);
if (requestDto.getProvider() != null && !"".equals(requestDto.getProvider()) && requestDto.getToken() != null && !"".equals(requestDto.getToken())) { if (requestDto.isProvider()) {
SocialUserResponseDto socialUserResponseDto = getSocialUserInfo(requestDto.getProvider(), requestDto.getToken()); SocialUserResponseDto socialUserResponseDto = getSocialUserInfo(requestDto.getProvider(), requestDto.getToken());
user.setSocial(requestDto.getProvider(), socialUserResponseDto.getId()); user.setSocial(requestDto.getProvider(), socialUserResponseDto.getId());
} }
@@ -329,6 +329,7 @@ public class UserService extends AbstractService implements UserDetailsService {
return true; return true;
} }
/** /**
* 사용자 비밀번호 찾기 * 사용자 비밀번호 찾기
* *

View File

@@ -5,6 +5,7 @@ const port = process.env.PORT || 3000
const serverApiUrl = process.env.SERVER_API_URL || 'http://localhost:8000' const serverApiUrl = process.env.SERVER_API_URL || 'http://localhost:8000'
const siteId = process.env.SITE_ID || '3' const siteId = process.env.SITE_ID || '3'
const mode = siteId === '2' ? 'lg' : siteId === '3' ? 'sm' : 'sm' const mode = siteId === '2' ? 'lg' : siteId === '3' ? 'sm' : 'sm'
const socialLoginEnabled = process.env.SOCIAL_LOGIN_ENABLED || 'false'
module.exports = { module.exports = {
i18n, i18n,
@@ -14,6 +15,7 @@ module.exports = {
MODE: mode, MODE: mode,
SERVER_API_URL: serverApiUrl, SERVER_API_URL: serverApiUrl,
SITE_ID: siteId, SITE_ID: siteId,
SOCIAL_LOGIN_ENABLED: socialLoginEnabled,
}, },
async rewrites() { async rewrites() {
return [ return [

View File

@@ -17,6 +17,7 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"cookies": "^0.8.0", "cookies": "^0.8.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"cross-env": "^7.0.3",
"date-fns": "^2.23.0", "date-fns": "^2.23.0",
"date-fns-tz": "^1.1.6", "date-fns-tz": "^1.1.6",
"eventsource": "^1.1.0", "eventsource": "^1.1.0",
@@ -4230,11 +4231,27 @@
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true "dev": true
}, },
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
"dependencies": {
"cross-spawn": "^7.0.1"
},
"bin": {
"cross-env": "src/bin/cross-env.js",
"cross-env-shell": "src/bin/cross-env-shell.js"
},
"engines": {
"node": ">=10.14",
"npm": ">=6",
"yarn": ">=1"
}
},
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": { "dependencies": {
"path-key": "^3.1.0", "path-key": "^3.1.0",
"shebang-command": "^2.0.0", "shebang-command": "^2.0.0",
@@ -6973,8 +6990,7 @@
"node_modules/isexe": { "node_modules/isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
"dev": true
}, },
"node_modules/istanbul-lib-coverage": { "node_modules/istanbul-lib-coverage": {
"version": "3.0.0", "version": "3.0.0",
@@ -10182,7 +10198,6 @@
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@@ -11269,7 +11284,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": { "dependencies": {
"shebang-regex": "^3.0.0" "shebang-regex": "^3.0.0"
}, },
@@ -11281,7 +11295,6 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@@ -12566,7 +12579,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": { "dependencies": {
"isexe": "^2.0.0" "isexe": "^2.0.0"
}, },
@@ -15965,11 +15977,18 @@
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true "dev": true
}, },
"cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
"requires": {
"cross-spawn": "^7.0.1"
}
},
"cross-spawn": { "cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": { "requires": {
"path-key": "^3.1.0", "path-key": "^3.1.0",
"shebang-command": "^2.0.0", "shebang-command": "^2.0.0",
@@ -18023,8 +18042,7 @@
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
"dev": true
}, },
"istanbul-lib-coverage": { "istanbul-lib-coverage": {
"version": "3.0.0", "version": "3.0.0",
@@ -20488,8 +20506,7 @@
"path-key": { "path-key": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
"dev": true
}, },
"path-parse": { "path-parse": {
"version": "1.0.7", "version": "1.0.7",
@@ -21311,7 +21328,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": { "requires": {
"shebang-regex": "^3.0.0" "shebang-regex": "^3.0.0"
} }
@@ -21319,8 +21335,7 @@
"shebang-regex": { "shebang-regex": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
"dev": true
}, },
"shell-quote": { "shell-quote": {
"version": "1.7.2", "version": "1.7.2",
@@ -22334,7 +22349,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": { "requires": {
"isexe": "^2.0.0" "isexe": "^2.0.0"
} }

View File

@@ -7,24 +7,22 @@
"npm": "6.14.7" "npm": "6.14.7"
}, },
"scripts": { "scripts": {
"dev": "ts-node --project tsconfig.server.json server/index.ts", "dev": "cross-env next dev -p ${PORT-3000}",
"dev:sm": "SITE_ID=3 npm run dev", "dev:sm": "SITE_ID=3 npm run dev",
"dev:lg": "SITE_ID=2 npm run dev", "dev:lg": "SITE_ID=2 npm run dev",
"dev:smWin": "set SITE_ID=3&&npm run dev", "dev:smWin": "set SITE_ID=3&&npm run dev",
"dev:lgWin": "set SITE_ID=2&&npm run dev", "dev:lgWin": "set SITE_ID=2&&npm run dev",
"build:server": "tsc --project tsconfig.server.json", "build": "NODE_ENV=production next build",
"build:next": "next build", "prebuild": "rimraf ./next",
"prebuild": "rimraf ./build", "build:prodlg": "env-cmd -f ./.env.production-lg npm run build",
"build": "NODE_ENV=production npm run build:next && npm run build:server", "start:prodlg": "env-cmd -f ./.env.production-lg npm run start",
"build:prodlg": "env-cmd -f ./.env.production-lg npm run build:next && npm run build:server", "build:prodsm": "env-cmd -f ./.env.production-sm npm run build",
"start:prodlg": "env-cmd -f ./.env.production-lg node build/index.js", "start:prodsm": "env-cmd -f ./.env.production-sm npm run start",
"build:prodsm": "env-cmd -f ./.env.production-sm npm run build:next && npm run build:server", "build:prodk8slg": "env-cmd -f ./.env.production-k8s-lg npm run build",
"start:prodsm": "env-cmd -f ./.env.production-sm node build/index.js", "start:prodk8slg": "env-cmd -f ./.env.production-k8s-lg npm run start",
"build:prodk8slg": "env-cmd -f ./.env.production-k8s-lg npm run build:next && npm run build:server", "build:prodk8ssm": "env-cmd -f ./.env.production-k8s-sm npm run build",
"start:prodk8slg": "env-cmd -f ./.env.production-k8s-lg node build/index.js", "start:prodk8ssm": "env-cmd -f ./.env.production-k8s-sm npm run start",
"build:prodk8ssm": "env-cmd -f ./.env.production-k8s-sm npm run build:next && npm run build:server", "start": "NODE_ENV=production next start",
"start:prodk8ssm": "env-cmd -f ./.env.production-k8s-sm node build/index.js",
"start": "NODE_ENV=production node build/index.js",
"test": "jest --coverage" "test": "jest --coverage"
}, },
"dependencies": { "dependencies": {
@@ -37,6 +35,7 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"cookies": "^0.8.0", "cookies": "^0.8.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"cross-env": "^7.0.3",
"date-fns": "^2.23.0", "date-fns": "^2.23.0",
"date-fns-tz": "^1.1.6", "date-fns-tz": "^1.1.6",
"eventsource": "^1.1.0", "eventsource": "^1.1.0",

View File

@@ -1,31 +0,0 @@
import { loadEnvConfig } from '@next/env'
import cors from 'cors'
import express, { Request, Response } from 'express'
import next from 'next'
loadEnvConfig('./', process.env.NODE_ENV !== 'production')
const port = process.env.PORT || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
const startServer = async () => {
try {
await app.prepare()
const server = express()
server.use(cors())
server.all('*', (req: Request, res: Response) => {
return handle(req, res)
})
server.listen(port, (err?: any) => {
if (err) throw err
console.info(`> Ready on localhost:${port} - env ${process.env.NODE_ENV}`)
})
} catch (error) {
console.error(error)
process.exit(1)
}
}
startServer()

View File

@@ -21,3 +21,5 @@ export const GOOGLE_CLIENT_ID = process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID
export const KAKAO_JAVASCRIPT_KEY = process.env.NEXT_PUBLIC_KAKAO_JAVASCRIPT_KEY export const KAKAO_JAVASCRIPT_KEY = process.env.NEXT_PUBLIC_KAKAO_JAVASCRIPT_KEY
export const NAVER_CLIENT_ID = process.env.NEXT_PUBLIC_NAVER_CLIENT_ID export const NAVER_CLIENT_ID = process.env.NEXT_PUBLIC_NAVER_CLIENT_ID
export const NAVER_CALLBACK_URL = process.env.NEXT_PUBLIC_NAVER_CALLBACK_URL export const NAVER_CALLBACK_URL = process.env.NEXT_PUBLIC_NAVER_CALLBACK_URL
export const SOCIAL_LOGIN_ENABLED = process.env.SOCIAL_LOGIN_ENABLED

View File

@@ -4,11 +4,11 @@ import { makeStyles, Theme } from '@material-ui/core/styles'
import Alert from '@material-ui/lab/Alert' import Alert from '@material-ui/lab/Alert'
import { ISocialUser, userService } from '@service' import { ISocialUser, userService } from '@service'
import { format, isValidPassword } from '@utils' import { format, isValidPassword } from '@utils'
import { GetServerSideProps } from 'next'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import React, { createRef, useEffect, useState } from 'react' import React, { createRef, useEffect, useState } from 'react'
import { Controller, useForm } from 'react-hook-form' import { Controller, useForm } from 'react-hook-form'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { GetServerSideProps } from 'next'
const useStyles = makeStyles((theme: Theme) => ({ const useStyles = makeStyles((theme: Theme) => ({
alert: { alert: {
@@ -81,7 +81,6 @@ const Form = (props: FormProps) => {
useEffect(() => { useEffect(() => {
if (socialUser) { if (socialUser) {
if (socialUser.name) { if (socialUser.name) {
} }
} }
}, [socialUser]) }, [socialUser])
@@ -175,7 +174,9 @@ const Form = (props: FormProps) => {
<input <input
ref={emailRef} ref={emailRef}
type="text" type="text"
readOnly={/*typeof socialUser.email !== 'undefined' && socialUser.email !== null*/false} readOnly={
/*typeof socialUser.email !== 'undefined' && socialUser.email !== null*/ false
}
value={field.value} value={field.value}
onChange={field.onChange} onChange={field.onChange}
placeholder={t('user.email')} placeholder={t('user.email')}
@@ -284,7 +285,9 @@ const Form = (props: FormProps) => {
> >
<input <input
type="text" type="text"
readOnly={/*typeof socialUser.name !== 'undefined' && socialUser.name !== null*/false} readOnly={
/*typeof socialUser.name !== 'undefined' && socialUser.name !== null*/ false
}
value={field.value} value={field.value}
onChange={field.onChange} onChange={field.onChange}
placeholder={t('label.title.name')} placeholder={t('label.title.name')}
@@ -355,7 +358,7 @@ export const getServerSideProps: GetServerSideProps = async context => {
return { return {
props: { props: {
socialUser socialUser,
}, },
} }
} }

View File

@@ -5,7 +5,14 @@ import {
KakaoLoginButton, KakaoLoginButton,
NaverLoginButton, NaverLoginButton,
} from '@components/Buttons' } from '@components/Buttons'
import CustomConfirm, { CustomConfirmPrpps } from '@components/CustomConfirm'
import Loader from '@components/Loader' import Loader from '@components/Loader'
import {
GOOGLE_CLIENT_ID,
KAKAO_JAVASCRIPT_KEY,
NAVER_CLIENT_ID,
SOCIAL_LOGIN_ENABLED,
} from '@constants/env'
import useUser from '@hooks/useUser' import useUser from '@hooks/useUser'
import { ILogin, loginSerivce } from '@service' import { ILogin, loginSerivce } from '@service'
import { userAtom } from '@stores' import { userAtom } from '@stores'
@@ -13,7 +20,6 @@ import Router, { useRouter } from 'next/router'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useRecoilValue } from 'recoil' import { useRecoilValue } from 'recoil'
import CustomConfirm, { CustomConfirmPrpps } from '@components/CustomConfirm'
interface AlertProps extends CustomConfirmPrpps { interface AlertProps extends CustomConfirmPrpps {
message: string message: string
@@ -62,7 +68,9 @@ const Login = () => {
}) })
// recoil 쓰려했는데 회원가입에 스탭이 있어서 진행중에 새로고침하면 상태가 삭제되면서 일반회원으로 가입될 수 있어서 소셜 정보를 파라미터로 넘김 // recoil 쓰려했는데 회원가입에 스탭이 있어서 진행중에 새로고침하면 상태가 삭제되면서 일반회원으로 가입될 수 있어서 소셜 정보를 파라미터로 넘김
router.push(`/auth/join?provider=${data.provider}&token=${data.token}`) router.push(
`/auth/join?provider=${data.provider}&token=${data.token}`,
)
}, },
handleCancel: () => { handleCancel: () => {
if (data.provider === 'kakao') { if (data.provider === 'kakao') {
@@ -131,16 +139,29 @@ const Login = () => {
{t('login.password_find')} {t('login.password_find')}
</ActiveLink> </ActiveLink>
</div> </div>
{/** 소셜 로그인을 사용하는 경우 enabled 됨. */}
{SOCIAL_LOGIN_ENABLED === 'true' && (
<article> <article>
<h3> <h3>
<span>{t('label.title.login.oauth')}</span> <span>{t('label.title.login.oauth')}</span>
</h3> </h3>
<div> <div>
<KakaoLoginButton handleClick={handleKakaoLogin} kakaoLoginMode={kakaoLoginMode} setKakaoLoginMode={setKakaoLoginMode} /> {KAKAO_JAVASCRIPT_KEY && (
<KakaoLoginButton
handleClick={handleKakaoLogin}
kakaoLoginMode={kakaoLoginMode}
setKakaoLoginMode={setKakaoLoginMode}
/>
)}
{NAVER_CLIENT_ID && (
<NaverLoginButton handleClick={handleNaverLogin} /> <NaverLoginButton handleClick={handleNaverLogin} />
)}
{GOOGLE_CLIENT_ID && (
<GoogleLoginButton handleClick={handleGoogleLogin} /> <GoogleLoginButton handleClick={handleGoogleLogin} />
)}
</div> </div>
</article> </article>
)}
{customConfirm && ( {customConfirm && (
<CustomConfirm <CustomConfirm
handleConfirm={customConfirm.handleConfirm} handleConfirm={customConfirm.handleConfirm}

View File

@@ -1,10 +0,0 @@
{
"extends": "./tsconfig.json", // 기본설정을 포함한다
"compilerOptions": {
"module": "commonjs", // commonJs 사용하도록 override
"outDir": "build", // 빌드 파일 경로 (production mode)
"noEmit": false // 서버에 대한 결과 파일을 내보내지 않음 (production mode)
},
"include": ["server"] // server/ 디렉토리 아래에 있는 파일만 컴파일 (production mode)
}
//기본적으로 사용하는 모듈은 esnext인데 express는 commonJs를 사용하므로 module을 override 해 주어야 한다.