Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
14fc569
Main->MainPage
Baetato Jan 9, 2024
12b5455
Login
Baetato Jan 9, 2024
ef49d53
test
taejun-J Jan 9, 2024
80067f6
[ADD]로그인페이지
Baetato Jan 10, 2024
5157c93
margin: 0
Baetato Jan 18, 2024
b9a0bee
Login page 0.0
Baetato Jan 21, 2024
2951e38
페이지 이동
Baetato Jan 21, 2024
983baec
Certify
Baetato Jan 23, 2024
b415d2b
닉네임 설정
Baetato Jan 23, 2024
1a6ff0b
닉네임 유효성 검사
Baetato Jan 24, 2024
633994c
닉네임 설정 수정
Baetato Jan 24, 2024
2343645
이전 페이지 기능 구현
Baetato Jan 24, 2024
9e00bba
인증번호 유효성 검사
Baetato Jan 24, 2024
cd9ae53
인증번호 알림창 수정
Baetato Jan 24, 2024
a24aa7c
Profile 경로 이동
Baetato Jan 24, 2024
2ea7f66
메인화면 라우팅
Baetato Jan 24, 2024
47d4e47
프로필 설정 토글 수정
Baetato Jan 28, 2024
afa4ce3
폰트 설정
Baetato Jan 28, 2024
0bb51fe
프로필 설정완료 버튼
Baetato Jan 28, 2024
c2ddc94
css 수정
Baetato Jan 28, 2024
ef92737
메인화면 무한 스크롤
Baetato Jan 29, 2024
324a0d4
메인화면 호버
Baetato Jan 30, 2024
9894cfe
메인화면 사이드 바
Baetato Jan 30, 2024
5cdc6fb
css 수정
Baetato Jan 30, 2024
1388685
css 수정 완료
Baetato Jan 30, 2024
0727d56
로그인 0.00 css 완성
Baetato Jan 31, 2024
4ee455e
로그인 0.01화면 css 완성
Baetato Jan 31, 2024
ea91d93
로그인 0.02화면 css완성
Baetato Jan 31, 2024
6204133
로그인 0.03화면 css완성
Baetato Jan 31, 2024
3579397
first
taejun-J Feb 4, 2024
b2b1226
test
taejun-J Feb 7, 2024
703ddb2
test2
taejun-J Feb 7, 2024
6e6605a
css 최종 수정
Baetato Feb 7, 2024
4397794
서버 연결 테스트코드
kojesung Feb 8, 2024
dcdc94c
해시태그 업로드 기능 완성
kojesung Feb 12, 2024
28fa823
recoil추가
kojesung Feb 13, 2024
c8e703b
카카오 간편 로그인 구현
Baetato Feb 14, 2024
2faab1a
헤더login시 accesstoken, userId 전역관리
kojesung Feb 15, 2024
336ac83
질문/답변 조회 기능 완성
kojesung Feb 16, 2024
a5a6078
답변등록 부모/자식 분리
kojesung Feb 16, 2024
1c2a4f9
답변 등록 기능 완성
kojesung Feb 16, 2024
225e6fa
질문등록기능 완성
kojesung Feb 17, 2024
f4c3f2d
test
kojesung Feb 17, 2024
a859bab
카카오 구현 수정
Baetato Feb 17, 2024
1fce89b
localstorage 로그인 상태 관리
kojesung Feb 17, 2024
f9ea024
질문 등록 시간 반영
kojesung Feb 17, 2024
8770639
메인페이지 연동 완료
Baetato Feb 17, 2024
b90a7fc
Auth 경로 변경
Baetato Feb 17, 2024
8fa2ba4
questionId 추가
Baetato Feb 17, 2024
ad1e677
localStorage 토큰, id값 추가
kojesung Feb 18, 2024
e263268
답변 좋아요 기능 추가
kojesung Feb 18, 2024
31c8bcf
수정하기 렌더링 추가
kojesung Feb 18, 2024
c5f6d6a
간편 로그인 수정
Baetato Feb 18, 2024
2e191ee
search페이지 추가
taejun-J Feb 18, 2024
48669d2
mypage/main 병합
kojesung Feb 18, 2024
f331887
Main 병합
kojesung Feb 18, 2024
5e28f33
메인 어른이 태그 수정
Baetato Feb 18, 2024
1260417
test
Baetato Feb 18, 2024
a4e4d44
questionId 수정 진행중
Baetato Feb 18, 2024
f5f1966
액세스 토큰 저장
Baetato Feb 18, 2024
fe9df7c
test
kojesung Feb 18, 2024
0d17bba
Login병합
kojesung Feb 18, 2024
12b0bd0
메인페이지 사이드바 로그인 이동 구현
Baetato Feb 18, 2024
a657afe
닉네임 변경 구현, 검색페이지 수정
taejun-J Feb 18, 2024
ba5b1d5
redirect url 수정
Baetato Feb 19, 2024
683d9ce
헤더 프로필 완성
kojesung Feb 19, 2024
aed2d60
수정
taejun-J Feb 19, 2024
25a6a66
질문/답변 수정 기능
kojesung Feb 19, 2024
ecb8213
test
Baetato Feb 19, 2024
bb0eef9
qa test
Baetato Feb 19, 2024
3acbb07
css 수정완료
Baetato Feb 20, 2024
33639a2
로고 추가
Baetato Feb 20, 2024
8d4ee3f
검색 아이콘 수정
Baetato Feb 20, 2024
49b8681
hashtag 불러오기 완료
Baetato Feb 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions lib/api/user.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import axios from 'axios';

/**
* 기본적인 HttpClient 객체 구조
* GET, POST, PUT, DELETE 메서드 제공
*
* @example
* const apiClient = new HttpClient('https://your-api-url.com');
*
* // GET 요청 예시
* apiClient.get('/endpoint')
* .then(response => console.log(response.data))
* .catch(error => console.error(error));
*
* // POST 요청 예시
* apiClient.post('/endpoint', { data: 'yourData' })
* .then(response => console.log(response.data))
* .catch(error => console.error(error));
*/
// class HttpClient {
// constructor(baseURL) {
// this.client = axios.create({
// baseURL: baseURL
// });
// }

// get(url, config = {}) {
// return this.client.get(url, config);
// }

// post(url, data, config = {}) {
// return this.client.post(url, data, config);
// }

// put(url, data, config = {}) {
// return this.client.put(url, data, config);
// }

// delete(url, config = {}) {
// return this.client.delete(url, config);
// }
// }
26,320 changes: 15,345 additions & 10,975 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@
"gh-pages": "^6.1.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.21.1",
"react-infinite-scroll-component": "^6.1.0",
"react-modal": "^3.16.1",
"react-router-dom": "^6.22.1",
"react-scripts": "^5.0.1",
"recoil": "^0.7.7",
"web-vitals": "^2.1.0"
},
"scripts": {
Expand Down
44 changes: 22 additions & 22 deletions public/index.html
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<!-- <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> -->
<!--

<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Web site created using create-react-app" />
<!-- <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> -->
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!-- <script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!-- <script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> -->
<!--
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Expand All @@ -27,12 +25,13 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body style = "margin : 0px">
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
<title>React App</title>
</head>

<body style="margin : 0px">
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.

Expand All @@ -42,5 +41,6 @@
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
</body>

</html>
74 changes: 46 additions & 28 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,42 +1,60 @@
// @ts-nocheck

import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Main from "src/Main";
import Qdetail from "src/Qdetail";
import Login1 from "src/Login1";
import Certify from "src/Certify";
import Nickname from "src/Nickname";
import Profile from "src/Profile";
import Qregister from "./Qregister";

import React from 'react';
import { useState } from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { SearchContentProvider } from './Context';
import Main from 'src/Main';
import Qdetail from 'src/Qdetail';
import Login1 from 'src/Login1';
import Certify from 'src/Certify';
import Nickname from 'src/Nickname';
import Profile from 'src/Profile';
import Qregister from './Qregister';
import Myprofile from './Myprofile';
import MainPage from './MainPage';
import Header from './Header';
import SearchPage from './SearchPage';
import SearchQues from './searchQues';
import Auth from "src/Auth";
function App() {
return (
<div>
<BrowserRouter basename={process.env.PUBLIC_URL}>
<Routes>
<Route path="/" element={<Login1 />} />
<Route path="/detail" element={<Qdetail />} />
<Route path="/certify" element={<Certify />} />
<Route path="/nickname" element={<Nickname />} />
<Route path="/setProfile" element={<Profile />} />
<Route path="/mainpage" element={<Main />} />
<Route path="/register" element={<Qregister />} />
</Routes>
</BrowserRouter>
</div>
<>
<SearchContentProvider>
<div>
<BrowserRouter basename={process.env.PUBLIC_URL}>
<Routes>
<Route path="/" element={<Login1 />} />
<Route path="/detail/:questionId" element={<Qdetail />} />
<Route path="/certify" element={<Certify />} />
<Route path="/nickname" element={<Nickname />} />
<Route path="/setProfile" element={<Profile />} />
<Route path="/mainpage" element={<MainPage />} />
{/*<Route path="/mainpage2" element={<MainPage2 />} />*/}
<Route path="/register" element={<Qregister />} />
<Route path="/myprofile" element={<Myprofile />} />
<Route path="/search" element={<SearchPage />} />
<Route path="/searchq" element={<SearchQues />} />
<Route path="/auth/kakao/login" element={<Auth />} />
{/* 정의되지 않은 경로에 접근시 해당 페이지로 이동*/}
<Route path="*" element={<Nickname />} />
</Routes>
</BrowserRouter>
</div>
</SearchContentProvider>
</>
);
}

if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker
.register("/service-worker.js")
.register('/service-worker.js', { type: 'text/javascript' })
.then((registration) => {
console.log("SW registered: ", registration);
console.log('SW registered: ', registration);
})
.catch((registrationError) => {
console.log("SW registration failed: ", registrationError);
console.log('SW registration failed: ', registrationError);
});
});
}
Expand Down
109 changes: 109 additions & 0 deletions src/Auth.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
//@ts-nocheck
import React, { useState, useEffect } from "react";
import axios from 'axios';
import { useNavigate } from 'react-router-dom';


function Auth() {
const navigate = useNavigate();
const [code, setCode] = useState({})

// useEffect(() => {
// // Query String Parsing
// let href = window.location.href;
// // Parsing Query String
// let queryString = href.substring(href.indexOf("?") + 1);
// // Parsing Query String to Object
// let queryObj = {};

// // Split by "&"
// queryString.split("&").forEach((value) => {
// let key = value.split("=")[0];
// let val = value.split("=")[1];
// queryObj[key] = val;
// });

// let kakaoCode = queryObj["code"];

// let data = {
// "grant_type" : "authorization_code",
// "client_id" : "1d5868c6919c5a981e66913f02262514",
// "redirect_uri" : "http://localhost:3000/auth/kakao/login",
// "code" : kakaoCode,
// };

// console.log("1",data);
// // 쿼리스트링으로 데이터 넘기기 시도
// axios.post(`https://kauth.kakao.com/oauth/token`, querystring.stringify(data),{
// headers : {
// "Content-type" : "application/x-www-form-urlencoded"
// }
// })
// // .then(console.log("3")) 테스트
// .then((res) => {
// console.log(res.data);
// // 여기에 회원가입 요청 API 호출!
// axios.get(`http://52.78.248.199:8080/users/sign_up?accessToken=${res.data.access_token}`);
// setCode(res.data);
// }).catch((err) => {
// console.log(err);
// });
// }, []);
// return (
// <div>
// <h1>AuthPage</h1>
// {JSON.stringify(code)}
// </div>
// );
// }
const signUp = async () => {
const location = window.location;

const params = new URLSearchParams(location.search);

let kakaoCode = params.get("code");

let data = {
"grant_type": "authorization_code",
"client_id": "9c0435350e0714d02ef07e6bccb168ab",
code: kakaoCode,
};

let response = await axios.post("https://kauth.kakao.com/oauth/token", data, {
headers: {
"Content-type": "application/x-www-form-urlencoded"
}
});

let ret = await axios.get(`http://52.78.248.199:8080/users/sign_up?accessToken=${response.data.access_token}`);
console.log(ret);
console.log(ret.data.result.accessToken);
let { isSuccess, result } = ret.data;
let { isNew } = result;
console.log(ret)
if (isSuccess) {
if (isNew) {
localStorage.setItem('accesstoken', ret.data.result.accessToken);
localStorage.setItem('userId', ret.data.result.userId);
// 프로필 수정 페이지로 이동
navigate("/nickname");
}
// 여기에 userId, accessToken, refreshToken을 저장하는 코드를 작성해야 함 (recoil 사용하는 것으로 알고있음)
// dispatch({type: INIT_USER, ...result});
localStorage.setItem('accesstoken', ret.data.result.accessToken);
localStorage.setItem('userId', ret.data.result.userId);
navigate("/mainpage");
} else {
console.log("Login Failed");
}
// localStorage.setItem('accesstoken', ret.data.result.accessToken);
// localStorage.setItem('userId', ret.data.result.userId);
// navigate("/mainpage");
}

useEffect(() => {
signUp()
}, []);
};

export default Auth;
Loading