diff --git a/core/api/Login/login.jsx b/core/api/Login/login.jsx
index c4722e6..2ec5d4a 100644
--- a/core/api/Login/login.jsx
+++ b/core/api/Login/login.jsx
@@ -5,6 +5,5 @@ export const login = async (id, pw) => {
url: "/login",
data: { password: pw, username: id },
});
- console.log("login res=================================", res);
return res;
};
diff --git a/core/api/Login/roleTypeCheck.jsx b/core/api/Login/roleTypeCheck.jsx
index 09c6af0..4c107aa 100644
--- a/core/api/Login/roleTypeCheck.jsx
+++ b/core/api/Login/roleTypeCheck.jsx
@@ -1,9 +1,10 @@
import Api, { METHOD } from "../apiController";
-export const getUserRoleType = async (token) => {
+export const getUserRoleType = async () => {
const res = await Api({
method: METHOD.GET,
url: "/session-user",
- headers: { Authorization: token },
+ // headers: { Authorization: token },
});
+ console.log(res);
return res.data;
};
diff --git a/core/api/Mentee/getLecture.jsx b/core/api/Mentee/getLecture.jsx
index 9df6e88..5a9da34 100644
--- a/core/api/Mentee/getLecture.jsx
+++ b/core/api/Mentee/getLecture.jsx
@@ -1,15 +1,16 @@
import qs from "qs";
import Api, { METHOD } from "../apiController";
-export const getLecture = async (token, data) => {
+export const getLecture = async (data) => {
const res = await Api({
method: METHOD.GET,
- headers: { Authorization: token },
+ // headers: { Authorization: token },
url: "/lectures",
params: data,
paramsSerializer: (params) => {
return qs.stringify(params, { arrayFormat: "repeat" });
},
});
+
return res.data;
};
diff --git a/core/api/apiController.jsx b/core/api/apiController.jsx
index 2fdbcf9..7b87f9f 100644
--- a/core/api/apiController.jsx
+++ b/core/api/apiController.jsx
@@ -1,4 +1,6 @@
import axios from "axios";
+import { getSession } from "next-auth/react";
+
let isRefresh = false;
const myAxios = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL,
@@ -6,25 +8,29 @@ const myAxios = axios.create({
myAxios.interceptors.request.use(
async (config) => {
- isRefresh =
- config.headers.common["X-Access-Token"] === undefined ? false : true;
+ const defaultHeader = axios.defaults.headers.common.Authorization;
+ console.log("header=====", defaultHeader);
+ // if (session) {
+ // config.headers.common["Authorization"] = defaultHeader;
+ // }
return config;
},
(err) => {
+ console.log(err);
return Promise.reject(err);
}
);
myAxios.interceptors.response.use(
async function (response) {
- console.log("isRefresh====", isRefresh);
- if (isRefresh) {
- myAxios(config);
- return response;
- }
+ // if (isRefresh) {
+ // myAxios(config);
+ // return response;
+ // }
return response;
},
async function (error) {
+ console.log(error.response);
return error.response;
}
);
diff --git a/package-lock.json b/package-lock.json
index 189d02c..815c530 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,6 +25,8 @@
"moment": "^2.29.1",
"net": "^1.0.2",
"next": "^12.1.0",
+ "next-auth": "^4.7.0",
+ "next-redux-cookie-wrapper": "^2.1.2",
"next-redux-wrapper": "^7.0.5",
"nookies": "^2.5.2",
"nprogress": "^0.2.0",
@@ -2587,6 +2589,14 @@
"node": ">= 8"
}
},
+ "node_modules/@panva/hkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz",
+ "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/@popperjs/core": {
"version": "2.11.4",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz",
@@ -5085,8 +5095,7 @@
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-diff": {
"version": "1.1.2",
@@ -6116,6 +6125,14 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
+ "node_modules/jose": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz",
+ "integrity": "sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/js-cookie": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
@@ -6387,6 +6404,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
"node_modules/lodash.capitalize": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz",
@@ -6438,6 +6460,14 @@
"node": ">=10"
}
},
+ "node_modules/lz-string": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
+ "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -6611,6 +6641,62 @@
}
}
},
+ "node_modules/next-auth": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.7.0.tgz",
+ "integrity": "sha512-boXSIzHvCyNq1Jthi24LLnx12iKBsqsMxUKm5qq9alkfhVMeIRUR/wKP0FPSGc1s9WcGXMS3NmKQfADCEb0wow==",
+ "dependencies": {
+ "@babel/runtime": "^7.16.3",
+ "@panva/hkdf": "^1.0.1",
+ "cookie": "^0.4.1",
+ "jose": "^4.3.7",
+ "oauth": "^0.9.15",
+ "openid-client": "^5.1.0",
+ "preact": "^10.6.3",
+ "preact-render-to-string": "^5.1.19",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": "^12.19.0 || ^14.15.0 || ^16.13.0"
+ },
+ "peerDependencies": {
+ "nodemailer": "^6.6.5",
+ "react": "^17.0.2 || ^18",
+ "react-dom": "^17.0.2 || ^18"
+ },
+ "peerDependenciesMeta": {
+ "nodemailer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-redux-cookie-wrapper": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/next-redux-cookie-wrapper/-/next-redux-cookie-wrapper-2.1.2.tgz",
+ "integrity": "sha512-FCrsIX2ihVVljkDOu4f5uVi9biL9374jt5M29bo2hDP9zRBtIlzowynNBsxa8VxhY+V9kolUYkemwgtapj2zBg==",
+ "dependencies": {
+ "@types/cookie": "^0.4.1",
+ "cookie": "^0.4.1",
+ "fast-deep-equal": "^3.1.3",
+ "immer": "^9.0.6",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "lz-string": "^1.4.4",
+ "nookies": "^2.5.2",
+ "type-fest": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "next-redux-wrapper": ">=6"
+ }
+ },
+ "node_modules/next-redux-cookie-wrapper/node_modules/@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
"node_modules/next-redux-wrapper": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-7.0.5.tgz",
@@ -6717,6 +6803,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -6725,6 +6816,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -6835,6 +6934,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/oidc-token-hash": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
+ "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==",
+ "engines": {
+ "node": "^10.13.0 || >=12.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -6852,6 +6959,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/openid-client": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.1.7.tgz",
+ "integrity": "sha512-VNtf/q+fv2Jiqi0ViLVmN3gGMSHF+YUGW6baKA/naoPKkKw4JdvghaP/kXQ/bzRRDWk6VmpCYDcR934UdDs8ug==",
+ "dependencies": {
+ "jose": "^4.1.4",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ },
+ "engines": {
+ "node": "^12.19.0 || ^14.15.0 || ^16.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -7050,6 +7174,26 @@
"url": "https://opencollective.com/postcss/"
}
},
+ "node_modules/preact": {
+ "version": "10.8.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.8.2.tgz",
+ "integrity": "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/preact-render-to-string": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.0.tgz",
+ "integrity": "sha512-+RGwSW78Cl+NsZRUbFW1MGB++didsfqRk+IyRVTaqy+3OjtpKK/6HgBtfszUX0YXMfo41k2iaQSseAHGKEwrbg==",
+ "dependencies": {
+ "pretty-format": "^3.8.0"
+ },
+ "peerDependencies": {
+ "preact": ">=10"
+ }
+ },
"node_modules/prebuild-install": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz",
@@ -7085,6 +7229,11 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/pretty-format": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -8889,6 +9038,17 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-fest": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.14.0.tgz",
+ "integrity": "sha512-hQnTQkFjL5ik6HF2fTAM8ycbr94UbQXK364wF930VHb0dfBJ5JBP8qwrR8TaK9zwUEk7meruo2JAUDMwvuxd/w==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -9081,6 +9241,14 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -10907,6 +11075,11 @@
"fastq": "^1.6.0"
}
},
+ "@panva/hkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz",
+ "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA=="
+ },
"@popperjs/core": {
"version": "2.11.4",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz",
@@ -12798,8 +12971,7 @@
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-diff": {
"version": "1.1.2",
@@ -13578,6 +13750,11 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
+ "jose": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz",
+ "integrity": "sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g=="
+ },
"js-cookie": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz",
@@ -13814,6 +13991,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
"lodash.capitalize": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz",
@@ -13859,6 +14041,11 @@
"yallist": "^4.0.0"
}
},
+ "lz-string": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
+ "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ=="
+ },
"mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -13979,6 +14166,45 @@
"use-subscription": "1.5.1"
}
},
+ "next-auth": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.7.0.tgz",
+ "integrity": "sha512-boXSIzHvCyNq1Jthi24LLnx12iKBsqsMxUKm5qq9alkfhVMeIRUR/wKP0FPSGc1s9WcGXMS3NmKQfADCEb0wow==",
+ "requires": {
+ "@babel/runtime": "^7.16.3",
+ "@panva/hkdf": "^1.0.1",
+ "cookie": "^0.4.1",
+ "jose": "^4.3.7",
+ "oauth": "^0.9.15",
+ "openid-client": "^5.1.0",
+ "preact": "^10.6.3",
+ "preact-render-to-string": "^5.1.19",
+ "uuid": "^8.3.2"
+ }
+ },
+ "next-redux-cookie-wrapper": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/next-redux-cookie-wrapper/-/next-redux-cookie-wrapper-2.1.2.tgz",
+ "integrity": "sha512-FCrsIX2ihVVljkDOu4f5uVi9biL9374jt5M29bo2hDP9zRBtIlzowynNBsxa8VxhY+V9kolUYkemwgtapj2zBg==",
+ "requires": {
+ "@types/cookie": "^0.4.1",
+ "cookie": "^0.4.1",
+ "fast-deep-equal": "^3.1.3",
+ "immer": "^9.0.6",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "lz-string": "^1.4.4",
+ "nookies": "^2.5.2",
+ "type-fest": "^2.8.0"
+ },
+ "dependencies": {
+ "@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ }
+ }
+ },
"next-redux-wrapper": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/next-redux-wrapper/-/next-redux-wrapper-7.0.5.tgz",
@@ -14064,11 +14290,21 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
+ "oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ },
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -14143,6 +14379,11 @@
"es-abstract": "^1.19.1"
}
},
+ "oidc-token-hash": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
+ "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -14157,6 +14398,17 @@
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true
},
+ "openid-client": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.1.7.tgz",
+ "integrity": "sha512-VNtf/q+fv2Jiqi0ViLVmN3gGMSHF+YUGW6baKA/naoPKkKw4JdvghaP/kXQ/bzRRDWk6VmpCYDcR934UdDs8ug==",
+ "requires": {
+ "jose": "^4.1.4",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ }
+ },
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -14308,6 +14560,19 @@
"source-map-js": "^1.0.1"
}
},
+ "preact": {
+ "version": "10.8.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.8.2.tgz",
+ "integrity": "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ=="
+ },
+ "preact-render-to-string": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.0.tgz",
+ "integrity": "sha512-+RGwSW78Cl+NsZRUbFW1MGB++didsfqRk+IyRVTaqy+3OjtpKK/6HgBtfszUX0YXMfo41k2iaQSseAHGKEwrbg==",
+ "requires": {
+ "pretty-format": "^3.8.0"
+ }
+ },
"prebuild-install": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz",
@@ -14334,6 +14599,11 @@
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true
},
+ "pretty-format": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
+ },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -15728,6 +15998,11 @@
"prelude-ls": "^1.2.1"
}
},
+ "type-fest": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.14.0.tgz",
+ "integrity": "sha512-hQnTQkFjL5ik6HF2fTAM8ycbr94UbQXK364wF930VHb0dfBJ5JBP8qwrR8TaK9zwUEk7meruo2JAUDMwvuxd/w=="
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -15893,6 +16168,11 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
diff --git a/package.json b/package.json
index 067720e..c9fb846 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,8 @@
"moment": "^2.29.1",
"net": "^1.0.2",
"next": "^12.1.0",
+ "next-auth": "^4.7.0",
+ "next-redux-cookie-wrapper": "^2.1.2",
"next-redux-wrapper": "^7.0.5",
"nookies": "^2.5.2",
"nprogress": "^0.2.0",
diff --git a/pages/_app.jsx b/pages/_app.jsx
index 8e7c131..8a98191 100644
--- a/pages/_app.jsx
+++ b/pages/_app.jsx
@@ -15,14 +15,15 @@ import { allChatRooms } from "../core/api/Chat";
import SocketProvider from "../core/provider";
import { tokenRefresh } from "../core/api/Login";
import { setCookie } from "../utils/cookie";
+import { getSession, SessionProvider } from "next-auth/react";
function MyApp({
+ pageProps,
my,
uncheckedCnt,
myChatRooms,
newToken,
Component,
- pageProps,
}) {
const [loading, setLoading] = useState(false);
axios.defaults.baseURL = process.env.NEXT_PUBLIC_API_URL;
@@ -65,57 +66,65 @@ function MyApp({
-
+
+ {/* */}
-
+ {/* */}
+
>
);
}
-MyApp.getInitialProps = async (context) => {
- let myTokens = {
- access: "",
- refresh: "",
- role: "",
- };
-
- let parsed = "";
- let newToken = "";
+export async function getServerSideProps(context) {
+ // let myTokens = {
+ // access: "",
+ // refresh: "",
+ // role: "",
+ // };
- if (context.ctx.req && context.ctx.req.headers.cookie) {
- console.log("this is req===", context.ctx.req);
- // if(context.ctx.req.statusCode==401 && message=="TOKENEXPIRED"){
- // tokenRefresh();
- // }
- const parsedCookie = cookie.parse(context.ctx.req.headers.cookie);
- parsed = parsedCookie;
- myTokens.access = parsedCookie.accessToken;
- myTokens.refresh = parsedCookie.refreshToken;
- myTokens.role = parsedCookie.role;
- const res = await tokenRefresh(
- myTokens.access,
- myTokens.refresh,
- myTokens.role
- );
- newToken =
- res?.headers["x-access-token"] !== undefined
- ? res.headers["x-access-token"]
- : myTokens.access;
- }
+ // let parsed = "";
+ // let newToken = "";
- axios.defaults.headers.common["Authorization"] = myTokens.access;
- axios.defaults.headers.common["Set-Cookie"] = JSON.stringify(myTokens);
- myAxios.defaults.headers.common["Authorization"] = myTokens.access;
- myAxios.defaults.headers.common["Set-Cookie"] = JSON.stringify(myTokens);
+ // if (context.ctx.req && context.ctx.req.headers.cookie) {
+ // // console.log("this is req===", context.ctx.req);
+ // // if(context.ctx.req.statusCode==401 && message=="TOKENEXPIRED"){
+ // // tokenRefresh();
+ // // }
+ // const parsedCookie = cookie.parse(context.ctx.req.headers.cookie);
+ // parsed = parsedCookie;
+ // myTokens.access = parsedCookie.accessToken;
+ // myTokens.refresh = parsedCookie.refreshToken;
+ // myTokens.role = parsedCookie.role;
+ // const res = await tokenRefresh(
+ // myTokens.access,
+ // myTokens.refresh,
+ // myTokens.role
+ // );
+ // newToken =
+ // res?.headers["x-access-token"] !== undefined
+ // ? res.headers["x-access-token"]
+ // : myTokens.access;
+ // }
- const my = await getMyInfo(myTokens.access);
- const uncheckedCnt = await getUncheckedNotificationCount(myTokens.access);
- const myChatRooms = await allChatRooms();
- return { my, uncheckedCnt, myChatRooms, newToken };
-};
+ // axios.defaults.headers.common["Authorization"] = myTokens.access;
+ // axios.defaults.headers.common["Set-Cookie"] = JSON.stringify(myTokens);
+ // myAxios.defaults.headers.common["Authorization"] = myTokens.access;
+ // myAxios.defaults.headers.common["Set-Cookie"] = JSON.stringify(myTokens);
+ // console.log(context);
+ // const my = await getMyInfo();
+ // const uncheckedCnt = await getUncheckedNotificationCount();
+ // const myChatRooms = await allChatRooms();
+ return {
+ // my,
+ // uncheckedCnt,
+ // myChatRooms,
+ // newToken,
+ session: await getSession(context),
+ };
+}
export default wrapper.withRedux(MyApp);
diff --git a/pages/api/auth/[...nextauth].jsx b/pages/api/auth/[...nextauth].jsx
new file mode 100644
index 0000000..6a9d834
--- /dev/null
+++ b/pages/api/auth/[...nextauth].jsx
@@ -0,0 +1,226 @@
+import axios from "axios";
+import NextAuth from "next-auth";
+import CredentialProvider from "next-auth/providers/credentials";
+import myAxios from "../../../core/api/apiController";
+import GoogleProvider from "next-auth/providers/google";
+import NaverProvider from "next-auth/providers/naver";
+
+import { login } from "../../../core/api/Login";
+
+// async function refreshAccessToken(tokenObjecth) {
+// try {
+// const url = "http://3.37.39.47:8080/refresh-token";
+// const response = await fetch(url, {
+// headers: {
+// Authorization: access,
+// ["X-Access-Token"]: access,
+// ["X-Refresh-Token"]: refresh,
+// role: "MENTOR",
+// },
+// method: "POST",
+// });
+
+// const refreshedTokens = await response.json();
+// console.log("refreshedTokens==", refreshedTokens);
+
+// if (!response.ok) {
+// throw refreshedTokens;
+// }
+
+// return {
+// ...token,
+// accessToken: refreshedTokens.headers["x-access-token"],
+// refreshToken: refreshedTokens.headers["x-refresh-token"],
+// };
+// } catch (error) {
+// console.log(error);
+// return {
+// ...token,
+// error: "RefreshAccessTokenError",
+// };
+// }
+// }
+
+// async function refreshAccessToken(tokenObject) {
+// try {
+// // Get a new set of tokens with a refreshToken
+// const tokenResponse = await axios.post(YOUR_API_URL + "auth/refreshToken", {
+// token: tokenObject.refreshToken,
+// });
+
+// return {
+// ...tokenObject,
+// accessToken: tokenResponse.data.accessToken,
+// accessTokenExpiry: tokenResponse.data.accessTokenExpiry,
+// refreshToken: tokenResponse.data.refreshToken,
+// };
+// } catch (error) {
+// return {
+// ...tokenObject,
+// error: "RefreshAccessTokenError",
+// };
+// }
+// }
+
+// export default NextAuth({
+// session: {
+// jwt: true,
+// maxAge: 30 * 24 * 60 * 60,
+// },
+// providers: [
+// CredentialProvider({
+// id: "email-password-credential",
+// name: "credentials",
+// credentials: {
+// username: { label: "Email", type: "email" },
+// password: {
+// label: "Password",
+// type: "password",
+// },
+// },
+
+// async authorize(credentials, req) {
+// const res = await login(credentials.username, credentials.password);
+// console.log("res===", res);
+// if (res?.status == 200) {
+// return {
+// id: 1,
+// name: "Hi",
+// email: "hkhk",
+// accessToken: res.headers["x-access-token"],
+// refreshToken: res.headers["x-refresh-token"],
+// role: "MENTOR",
+// };
+// } else {
+// return null;
+// }
+// },
+// }),
+// ],
+// secret: process.env.SECRET,
+// callbacks: {
+// async jwt({ token, user, account }) {
+// console.log("user=", user);
+// console.log("acc=", account);
+// console.log("username ====", user);
+// if (typeof user !== typeof undefined) {
+// console.log("valid user!");
+// // token.access = user.accessToken;
+// // token.refresh = user.refreshToken;
+// // token.role = user.role;
+// token.user = user;
+// } else {
+// console.log("invalid user!");
+// }
+// return token;
+// },
+// async session({ session, token }) {
+// console.log("session===", session);
+// if (session !== null) {
+// // session.access = token.access;
+// // session.refresh = token.refresh;
+// // session.role = token.role;
+// session.user = token;
+// } else if (
+// typeof token.user !== typeof undefined &&
+// (typeof session.user === typeof undefined ||
+// (typeof session.user !== typeof undefined &&
+// typeof session.user.userId === typeof undefined))
+// ) {
+// session.user = token.user;
+// } else if (typeof token !== typeof undefined) {
+// session.token = token;
+// }
+// return session;
+// },
+// },
+// pages: { signIn: "/common/auth/login" },
+// });
+
+const providers = [
+ CredentialProvider({
+ name: "Credentials",
+ id: "email-password-credential",
+ credentials: {
+ username: { label: "Email", type: "email" },
+ password: {
+ label: "Password",
+ type: "password",
+ },
+ },
+
+ authorize: async (credentials) => {
+ try {
+ // Authenticate user with credentials
+ // const user = await axios.post(YOUR_API_URL + "auth/login", {
+ // password: credentials.password,
+ // email: credentials.email,
+ // });
+ const user = await login(credentials.username, credentials.password);
+ console.log(credentials);
+ if (user.data.accessToken) {
+ return user.data;
+ }
+
+ return null;
+ } catch (e) {
+ throw new Error(e);
+ }
+ },
+ }),
+
+ GoogleProvider({
+ clientId: process.env.GOOGLE_CLIENT_ID,
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
+ }),
+
+ NaverProvider({
+ clientId: process.env.NAVER_CLIENT_ID,
+ clientSecret: process.env.NAVER_CLIENT_SECRET,
+ }),
+];
+
+const callbacks = {
+ jwt: async ({ token, user }) => {
+ console.log("user == ", user);
+ console.log("token ====", token);
+ if (user) {
+ // This will only be executed at login. Each next invocation will skip this part.
+ token.accessToken = user.accessToken;
+ token.accessTokenExpiry = user.accessTokenExpiry;
+ token.refreshToken = user.refreshToken;
+ }
+
+ // If accessTokenExpiry is 24 hours, we have to refresh token before 24 hours pass.
+ const shouldRefreshTime = Math.round(
+ token.accessTokenExpiry - 60 * 60 * 1000 - Date.now()
+ );
+
+ // If the token is still valid, just return it.
+ if (shouldRefreshTime > 0) {
+ return Promise.resolve(token);
+ }
+
+ // If the call arrives after 23 hours have passed, we allow to refresh the token.
+ // token = refreshAccessToken(token);
+ return Promise.resolve(token);
+ },
+ session: async ({ session, token }) => {
+ axios.defaults.headers.common.Authorization = `${token.accessToken}`;
+ session.accessToken = token.accessToken;
+ session.accessTokenExpiry = token.accessTokenExpiry;
+ session.error = token.error;
+
+ return Promise.resolve(session);
+ },
+};
+
+export const options = {
+ providers,
+ callbacks,
+ pages: { signIn: "/common/auth/login" },
+ secret: process.env.SECRET,
+};
+
+const Auth = (req, res) => NextAuth(req, res, options);
+export default Auth;
diff --git a/pages/common/auth/login.jsx b/pages/common/auth/login.jsx
index ecf2250..db088c2 100644
--- a/pages/common/auth/login.jsx
+++ b/pages/common/auth/login.jsx
@@ -11,6 +11,7 @@ import { login, getUserRoleType } from "../../../core/api/Login";
import { cookieForAuth, removeInfo } from "../../../utils/cookie";
import { IC_Google, IC_Kakao, IC_Logo, IC_Naver } from "../../../icons";
import { NameLogo } from "../../../components/common/icons/nameLogo";
+import { signIn, useSession } from "next-auth/react";
const Login = () => {
const [username, setUsername] = useState("");
@@ -22,16 +23,23 @@ const Login = () => {
}, []);
const checkAccount = async () => {
- const res = await login(username, password);
- if (res.status == 200) {
- const role = await getUserRoleType(res.headers["x-access-token"]);
- cookieForAuth(res, role);
- if (role.loginType === "ROLE_MENTOR") {
- router.push("/mentor/myclass/myClassList");
- }
- if (role.loginType === "ROLE_MENTEE") {
- router.push("/mentee");
- }
+ const response = await signIn("email-password-credential", {
+ username,
+ password,
+ redirect: false,
+ });
+ console.log("response=", response);
+
+ // const res = await login(username, password);
+ if (response.status == 200) {
+ // const role = await getUserRoleType(response.headers["x-access-token"]);
+ // cookieForAuth(res, role);
+ // if (role.loginType === "ROLE_MENTOR") {
+ // router.push("/mentor/myclass/myClassList");
+ // }
+ // if (role.loginType === "ROLE_MENTEE") {
+ router.push("/mentee");
+ // }
} else {
setError(true);
}
diff --git a/pages/mentee/index.jsx b/pages/mentee/index.jsx
index 29b70db..c992a87 100644
--- a/pages/mentee/index.jsx
+++ b/pages/mentee/index.jsx
@@ -19,6 +19,7 @@ import Chip from "@mui/material/Chip";
import { getLecture } from "../../core/api/Mentee";
import { getUserRoleType } from "../../core/api/Login";
import { useDebounceEffect } from "./board";
+import { getSession } from "next-auth/react";
const filters = ["개발 분야", "수업 방식", "레벨"];
const subjectsList = [
@@ -68,7 +69,7 @@ const Home = ({ classes, role, token, user }) => {
const [difficultyType, setDifficultyType] = useState(["전체"]);
const [isVisible, setIsVisible] = useState(false);
const [value, setValue] = useState("1");
-
+ console.log("test", classes);
// 필터 컨버팅
const difficult = difficultyType.map((el) => converDifficulty(el));
const group = isGroup.map((el) => convertGroup(el));
@@ -104,7 +105,7 @@ const Home = ({ classes, role, token, user }) => {
if (Math.round(scrollTop + innerHeight) >= scrollHeight) {
setPage(page + 1);
- const showMore = await getLecture(token, {
+ const showMore = await getLecture({
difficultyTypes: difficult,
isGroup: group,
page: page + 1,
@@ -134,7 +135,7 @@ const Home = ({ classes, role, token, user }) => {
systemType: type,
title: search,
};
- const newLecture = await getLecture(token, data);
+ const newLecture = await getLecture(data);
setClassData(newLecture.content);
setIsVisible(false);
setPage(1);
@@ -150,25 +151,26 @@ const Home = ({ classes, role, token, user }) => {
const data = {
page: 1,
};
- const newLecture = await getLecture(token, data);
+ const newLecture = await getLecture(data);
setClassData(newLecture.content);
};
- const debounceSearch = async () => {
- const data = {
- difficultyTypes: difficult,
- isGroup: group,
- page: 1,
- subjects: subjects.filter((el) => el !== "전체"),
- systemType: type,
- title: search,
- };
- const newLecture = await getLecture(token, data);
- setClassData(newLecture.content);
- setPage(1);
- };
+ // const debounceSearch = async () => {
+ // const data = {
+ // difficultyTypes: difficult,
+ // isGroup: group,
+ // page: 1,
+ // subjects: subjects.filter((el) => el !== "전체"),
+ // systemType: type,
+ // title: search,
+ // };
+ // const newLecture = await getLecture(data);
+ // console.log(newLecture);
+ // setClassData(newLecture.content);
+ // setPage(1);
+ // };
- useDebounceEffect(() => debounceSearch(), 500, [search]);
+ // useDebounceEffect(() => debounceSearch(), 500, [search]);
const handleChange = (event, newValue) => {
setValue(newValue);
@@ -379,16 +381,17 @@ const Home = ({ classes, role, token, user }) => {
};
export const getServerSideProps = async (context) => {
- const parsedCookies = cookie.parse(context.req.headers.cookie);
- const role = parsedCookies.role;
- const classes = await getLecture(parsedCookies.accessToken, { page: 1 });
- const user = await getUserRoleType(parsedCookies.accessToken);
+ // const parsedCookies = cookie.parse(context.req.headers.cookie);
+ // const role = parsedCookies.role;
+ const classes = await getLecture({ page: 1 });
+ const user = await getUserRoleType();
+ const token = await getSession(context);
return {
props: {
classes: classes,
- role,
- token: parsedCookies.accessToken,
+ role: "MENTEE",
+ token: token,
user,
},
};