최정민

FEAT : 구글로그인 api 추가

구글로그인api를 통해 1차 로그인을 구글로그인으로 구현함

-
...@@ -4,6 +4,14 @@ ...@@ -4,6 +4,14 @@
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
7 + "abort-controller": {
8 + "version": "3.0.0",
9 + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
10 + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
11 + "requires": {
12 + "event-target-shim": "^5.0.0"
13 + }
14 + },
7 "accepts": { 15 "accepts": {
8 "version": "1.3.7", 16 "version": "1.3.7",
9 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 17 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
...@@ -13,6 +21,29 @@ ...@@ -13,6 +21,29 @@
13 "negotiator": "0.6.2" 21 "negotiator": "0.6.2"
14 } 22 }
15 }, 23 },
24 + "agent-base": {
25 + "version": "6.0.2",
26 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
27 + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
28 + "requires": {
29 + "debug": "4"
30 + },
31 + "dependencies": {
32 + "debug": {
33 + "version": "4.3.1",
34 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
35 + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
36 + "requires": {
37 + "ms": "2.1.2"
38 + }
39 + },
40 + "ms": {
41 + "version": "2.1.2",
42 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
43 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
44 + }
45 + }
46 + },
16 "ansi-styles": { 47 "ansi-styles": {
17 "version": "3.2.1", 48 "version": "3.2.1",
18 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 49 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
...@@ -26,6 +57,11 @@ ...@@ -26,6 +57,11 @@
26 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 57 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
27 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 58 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
28 }, 59 },
60 + "arrify": {
61 + "version": "2.0.1",
62 + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
63 + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
64 + },
29 "async": { 65 "async": {
30 "version": "0.9.2", 66 "version": "0.9.2",
31 "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 67 "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
...@@ -36,6 +72,11 @@ ...@@ -36,6 +72,11 @@
36 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 72 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
37 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 73 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
38 }, 74 },
75 + "base64-js": {
76 + "version": "1.5.1",
77 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
78 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
79 + },
39 "basic-auth": { 80 "basic-auth": {
40 "version": "2.0.1", 81 "version": "2.0.1",
41 "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 82 "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
...@@ -44,6 +85,11 @@ ...@@ -44,6 +85,11 @@
44 "safe-buffer": "5.1.2" 85 "safe-buffer": "5.1.2"
45 } 86 }
46 }, 87 },
88 + "bignumber.js": {
89 + "version": "9.0.1",
90 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
91 + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
92 + },
47 "body-parser": { 93 "body-parser": {
48 "version": "1.18.3", 94 "version": "1.18.3",
49 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 95 "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
...@@ -70,6 +116,11 @@ ...@@ -70,6 +116,11 @@
70 "concat-map": "0.0.1" 116 "concat-map": "0.0.1"
71 } 117 }
72 }, 118 },
119 + "buffer-equal-constant-time": {
120 + "version": "1.0.1",
121 + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
122 + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
123 + },
73 "bytes": { 124 "bytes": {
74 "version": "3.0.0", 125 "version": "3.0.0",
75 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 126 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
...@@ -150,6 +201,14 @@ ...@@ -150,6 +201,14 @@
150 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 201 "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
151 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 202 "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
152 }, 203 },
204 + "ecdsa-sig-formatter": {
205 + "version": "1.0.11",
206 + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
207 + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
208 + "requires": {
209 + "safe-buffer": "^5.0.1"
210 + }
211 + },
153 "ee-first": { 212 "ee-first": {
154 "version": "1.1.1", 213 "version": "1.1.1",
155 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 214 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -183,6 +242,11 @@ ...@@ -183,6 +242,11 @@
183 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 242 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
184 "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 243 "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
185 }, 244 },
245 + "event-target-shim": {
246 + "version": "5.0.1",
247 + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
248 + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
249 + },
186 "express": { 250 "express": {
187 "version": "4.16.4", 251 "version": "4.16.4",
188 "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 252 "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
...@@ -227,6 +291,16 @@ ...@@ -227,6 +291,16 @@
227 } 291 }
228 } 292 }
229 }, 293 },
294 + "extend": {
295 + "version": "3.0.2",
296 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
297 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
298 + },
299 + "fast-text-encoding": {
300 + "version": "1.0.3",
301 + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
302 + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
303 + },
230 "filelist": { 304 "filelist": {
231 "version": "1.0.2", 305 "version": "1.0.2",
232 "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", 306 "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
...@@ -259,6 +333,61 @@ ...@@ -259,6 +333,61 @@
259 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 333 "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
260 "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 334 "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
261 }, 335 },
336 + "gaxios": {
337 + "version": "4.2.1",
338 + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.2.1.tgz",
339 + "integrity": "sha512-s+rTywpw6CmfB8r9TXYkpix7YFeuRjnR/AqhaJrQqsNhsAqej+IAiCc3hadzQH3gHyWth30tvYjxH8EVjQt/8Q==",
340 + "requires": {
341 + "abort-controller": "^3.0.0",
342 + "extend": "^3.0.2",
343 + "https-proxy-agent": "^5.0.0",
344 + "is-stream": "^2.0.0",
345 + "node-fetch": "^2.3.0"
346 + }
347 + },
348 + "gcp-metadata": {
349 + "version": "4.2.1",
350 + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz",
351 + "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==",
352 + "requires": {
353 + "gaxios": "^4.0.0",
354 + "json-bigint": "^1.0.0"
355 + }
356 + },
357 + "google-auth-library": {
358 + "version": "7.0.4",
359 + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.0.4.tgz",
360 + "integrity": "sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q==",
361 + "requires": {
362 + "arrify": "^2.0.0",
363 + "base64-js": "^1.3.0",
364 + "ecdsa-sig-formatter": "^1.0.11",
365 + "fast-text-encoding": "^1.0.0",
366 + "gaxios": "^4.0.0",
367 + "gcp-metadata": "^4.2.0",
368 + "gtoken": "^5.0.4",
369 + "jws": "^4.0.0",
370 + "lru-cache": "^6.0.0"
371 + }
372 + },
373 + "google-p12-pem": {
374 + "version": "3.0.3",
375 + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz",
376 + "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==",
377 + "requires": {
378 + "node-forge": "^0.10.0"
379 + }
380 + },
381 + "gtoken": {
382 + "version": "5.2.1",
383 + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz",
384 + "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==",
385 + "requires": {
386 + "gaxios": "^4.0.0",
387 + "google-p12-pem": "^3.0.3",
388 + "jws": "^4.0.0"
389 + }
390 + },
262 "has-flag": { 391 "has-flag": {
263 "version": "3.0.0", 392 "version": "3.0.0",
264 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 393 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
...@@ -275,6 +404,30 @@ ...@@ -275,6 +404,30 @@
275 "statuses": ">= 1.4.0 < 2" 404 "statuses": ">= 1.4.0 < 2"
276 } 405 }
277 }, 406 },
407 + "https-proxy-agent": {
408 + "version": "5.0.0",
409 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
410 + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
411 + "requires": {
412 + "agent-base": "6",
413 + "debug": "4"
414 + },
415 + "dependencies": {
416 + "debug": {
417 + "version": "4.3.1",
418 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
419 + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
420 + "requires": {
421 + "ms": "2.1.2"
422 + }
423 + },
424 + "ms": {
425 + "version": "2.1.2",
426 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
427 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
428 + }
429 + }
430 + },
278 "iconv-lite": { 431 "iconv-lite": {
279 "version": "0.4.23", 432 "version": "0.4.23",
280 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 433 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
...@@ -293,6 +446,11 @@ ...@@ -293,6 +446,11 @@
293 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 446 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
294 "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 447 "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
295 }, 448 },
449 + "is-stream": {
450 + "version": "2.0.0",
451 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
452 + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
453 + },
296 "jake": { 454 "jake": {
297 "version": "10.8.2", 455 "version": "10.8.2",
298 "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", 456 "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
...@@ -304,6 +462,41 @@ ...@@ -304,6 +462,41 @@
304 "minimatch": "^3.0.4" 462 "minimatch": "^3.0.4"
305 } 463 }
306 }, 464 },
465 + "json-bigint": {
466 + "version": "1.0.0",
467 + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
468 + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
469 + "requires": {
470 + "bignumber.js": "^9.0.0"
471 + }
472 + },
473 + "jwa": {
474 + "version": "2.0.0",
475 + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
476 + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
477 + "requires": {
478 + "buffer-equal-constant-time": "1.0.1",
479 + "ecdsa-sig-formatter": "1.0.11",
480 + "safe-buffer": "^5.0.1"
481 + }
482 + },
483 + "jws": {
484 + "version": "4.0.0",
485 + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
486 + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
487 + "requires": {
488 + "jwa": "^2.0.0",
489 + "safe-buffer": "^5.0.1"
490 + }
491 + },
492 + "lru-cache": {
493 + "version": "6.0.0",
494 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
495 + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
496 + "requires": {
497 + "yallist": "^4.0.0"
498 + }
499 + },
307 "media-typer": { 500 "media-typer": {
308 "version": "0.3.0", 501 "version": "0.3.0",
309 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 502 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
...@@ -367,6 +560,16 @@ ...@@ -367,6 +560,16 @@
367 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 560 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
368 "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 561 "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
369 }, 562 },
563 + "node-fetch": {
564 + "version": "2.6.1",
565 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
566 + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
567 + },
568 + "node-forge": {
569 + "version": "0.10.0",
570 + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
571 + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
572 + },
370 "on-finished": { 573 "on-finished": {
371 "version": "2.3.0", 574 "version": "2.3.0",
372 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 575 "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
...@@ -502,6 +705,11 @@ ...@@ -502,6 +705,11 @@
502 "version": "1.1.2", 705 "version": "1.1.2",
503 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 706 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
504 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 707 "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
708 + },
709 + "yallist": {
710 + "version": "4.0.0",
711 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
712 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
505 } 713 }
506 } 714 }
507 } 715 }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
10 "debug": "~2.6.9", 10 "debug": "~2.6.9",
11 "ejs": "^3.1.6", 11 "ejs": "^3.1.6",
12 "express": "^4.16.4", 12 "express": "^4.16.4",
13 + "google-auth-library": "^7.0.4",
13 "http-errors": "~1.6.3", 14 "http-errors": "~1.6.3",
14 "morgan": "~1.9.1" 15 "morgan": "~1.9.1"
15 } 16 }
......
1 var express = require('express'); 1 var express = require('express');
2 var router = express.Router(); 2 var router = express.Router();
3 +var {OAuth2Client} = require('google-auth-library');
4 +var CLIENT_ID = "94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com"
5 +var client= new OAuth2Client(CLIENT_ID);
3 6
4 /* GET home page. */ 7 /* GET home page. */
5 router.get('/', function(req, res, next) { 8 router.get('/', function(req, res, next) {
6 - res.render('index', { title: 'Express' }); 9 + res.render('index', { d: "94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com" });
10 +});
11 +router.get('/index', function(req, res, next) {
12 + res.render('index', { d: "94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com" });
13 +});
14 +
15 +router.post('/index', (req, res) => {
16 + let token=req.body.token;
17 + async function verify() {
18 + const ticket = await client.verifyIdToken({
19 + idToken: token,
20 + audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
21 + });
22 + }
23 + verify()
24 + .then(()=>{
25 + res.cookie('session-token', token);
26 + res.send('success')
27 + })
28 + .catch(console.error);
7 }); 29 });
8 30
31 +router.get('/login', checkAuthenticated, (req,res )=>{
32 + let user=req.user;
33 + res.render('login', {user})
34 +});
9 module.exports = router; 35 module.exports = router;
36 +
37 +
38 +
39 +function checkAuthenticated(req, res, next){
40 +
41 + let token = req.cookies['session-token'];
42 +
43 + let user = {};
44 + async function verify() {
45 + const ticket = await client.verifyIdToken({
46 + idToken: token,
47 + audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
48 + });
49 + const payload = ticket.getPayload();
50 + user.name = payload.name;
51 + user.email = payload.email;
52 + user.picture = payload.picture;
53 + console.log(user.name);
54 + }
55 + verify()
56 + .then(()=>{
57 + req.user = user;
58 + next();
59 + })
60 + .catch(err=>{
61 + res.redirect('/login')
62 + })
63 +
64 +}
...\ No newline at end of file ...\ No newline at end of file
......
1 +<!DOCTYPE html>
2 +<html>
3 +<head>
4 + <meta charset="UTF-8">
5 + <script src="https://apis.google.com/js/platform.js" async defer></script>
6 + <meta name="google-signin-client_id" content=<%=d%>>
7 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 + <title><%= d%></title>
9 + <link rel='stylesheet' href='/stylesheets/style.css' />
10 +</head>
11 +
12 +<body>
13 +<h1>Login</h1>
14 +<div class="g-signin2" data-onsuccess="onSignIn"></div>
15 +<a href="#" onclick="signOut();">Sign out</a>
16 +</body>
17 +
18 +
19 +<script>
20 + function onSignIn(googleUser) {
21 + var id_token = googleUser.getAuthResponse().id_token;
22 + //console.log(id_token);
23 + var xhr = new XMLHttpRequest();
24 + xhr.open('POST', '/index');
25 + xhr.setRequestHeader('Content-Type', 'application/json');
26 + xhr.onload = function() {
27 + console.log('Signed in as: ' + xhr.responseText);
28 + if(xhr.responseText == 'success'){
29 + signOut();
30 + location.assign('/login')
31 + }
32 + };
33 + xhr.send(JSON.stringify({token: id_token}));
34 + }
35 +
36 + function signOut() {
37 + var auth2 = gapi.auth2.getAuthInstance();
38 + auth2.signOut().then(function () {
39 + console.log('User signed out.');
40 + });
41 + }
42 +</script>
43 +</html>
......
1 +<!DOCTYPE html>
2 +<html lang="en">
3 +<head>
4 + <meta charset="UTF-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 +
7 + <title>logined</title>
8 +</head>
9 +<body>
10 +
11 +<a href="/index" onclick="signOut();">Sign Out</a>
12 +<h1>Hi <%= user.name %></h1>
13 +
14 +</body>
15 +<script>
16 + function signOut() {
17 + var auth2 = gapi.auth2.getAuthInstance();
18 + auth2.signOut().then(function () {
19 + console.log('User signed out.');
20 + });
21 + }
22 +</script>
23 +</html>
...\ No newline at end of file ...\ No newline at end of file