Toggle navigation
Toggle navigation
This project
Loading...
Sign in
김대철
/
CafeRecommend
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
1
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
최정민
2021-05-11 00:19:01 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
3762470fc9881ce1cceaf7240c96731bd90d1479
3762470f
1 parent
f6266e79
FEAT : 구글로그인 api 추가
구글로그인api를 통해 1차 로그인을 구글로그인으로 구현함 -
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
331 additions
and
1 deletions
package-lock.json
package.json
routes/index.js
views/index.ejs
views/login.ejs
package-lock.json
View file @
3762470
...
...
@@ -4,6 +4,14 @@
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"abort-controller"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz"
,
"integrity"
:
"sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="
,
"requires"
:
{
"event-target-shim"
:
"^5.0.0"
}
},
"accepts"
:
{
"version"
:
"1.3.7"
,
"resolved"
:
"https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"
,
...
...
@@ -13,6 +21,29 @@
"negotiator"
:
"0.6.2"
}
},
"agent-base"
:
{
"version"
:
"6.0.2"
,
"resolved"
:
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
,
"integrity"
:
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="
,
"requires"
:
{
"debug"
:
"4"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"4.3.1"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"
,
"integrity"
:
"sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="
,
"requires"
:
{
"ms"
:
"2.1.2"
}
},
"ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ansi-styles"
:
{
"version"
:
"3.2.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
,
...
...
@@ -26,6 +57,11 @@
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"integrity"
:
"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"arrify"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz"
,
"integrity"
:
"sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
},
"async"
:
{
"version"
:
"0.9.2"
,
"resolved"
:
"https://registry.npmjs.org/async/-/async-0.9.2.tgz"
,
...
...
@@ -36,6 +72,11 @@
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
,
"integrity"
:
"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js"
:
{
"version"
:
"1.5.1"
,
"resolved"
:
"https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
,
"integrity"
:
"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"basic-auth"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
...
...
@@ -44,6 +85,11 @@
"safe-buffer"
:
"5.1.2"
}
},
"bignumber.js"
:
{
"version"
:
"9.0.1"
,
"resolved"
:
"https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz"
,
"integrity"
:
"sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
},
"body-parser"
:
{
"version"
:
"1.18.3"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz"
,
...
...
@@ -70,6 +116,11 @@
"concat-map"
:
"0.0.1"
}
},
"buffer-equal-constant-time"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz"
,
"integrity"
:
"sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"bytes"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"
,
...
...
@@ -150,6 +201,14 @@
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ecdsa-sig-formatter"
:
{
"version"
:
"1.0.11"
,
"resolved"
:
"https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz"
,
"integrity"
:
"sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="
,
"requires"
:
{
"safe-buffer"
:
"^5.0.1"
}
},
"ee-first"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
...
...
@@ -183,6 +242,11 @@
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"event-target-shim"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz"
,
"integrity"
:
"sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
"express"
:
{
"version"
:
"4.16.4"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.16.4.tgz"
,
...
...
@@ -227,6 +291,16 @@
}
}
},
"extend"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
,
"integrity"
:
"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-text-encoding"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz"
,
"integrity"
:
"sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
},
"filelist"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz"
,
...
...
@@ -259,6 +333,61 @@
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"integrity"
:
"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"gaxios"
:
{
"version"
:
"4.2.1"
,
"resolved"
:
"https://registry.npmjs.org/gaxios/-/gaxios-4.2.1.tgz"
,
"integrity"
:
"sha512-s+rTywpw6CmfB8r9TXYkpix7YFeuRjnR/AqhaJrQqsNhsAqej+IAiCc3hadzQH3gHyWth30tvYjxH8EVjQt/8Q=="
,
"requires"
:
{
"abort-controller"
:
"^3.0.0"
,
"extend"
:
"^3.0.2"
,
"https-proxy-agent"
:
"^5.0.0"
,
"is-stream"
:
"^2.0.0"
,
"node-fetch"
:
"^2.3.0"
}
},
"gcp-metadata"
:
{
"version"
:
"4.2.1"
,
"resolved"
:
"https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz"
,
"integrity"
:
"sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw=="
,
"requires"
:
{
"gaxios"
:
"^4.0.0"
,
"json-bigint"
:
"^1.0.0"
}
},
"google-auth-library"
:
{
"version"
:
"7.0.4"
,
"resolved"
:
"https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.0.4.tgz"
,
"integrity"
:
"sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q=="
,
"requires"
:
{
"arrify"
:
"^2.0.0"
,
"base64-js"
:
"^1.3.0"
,
"ecdsa-sig-formatter"
:
"^1.0.11"
,
"fast-text-encoding"
:
"^1.0.0"
,
"gaxios"
:
"^4.0.0"
,
"gcp-metadata"
:
"^4.2.0"
,
"gtoken"
:
"^5.0.4"
,
"jws"
:
"^4.0.0"
,
"lru-cache"
:
"^6.0.0"
}
},
"google-p12-pem"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz"
,
"integrity"
:
"sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA=="
,
"requires"
:
{
"node-forge"
:
"^0.10.0"
}
},
"gtoken"
:
{
"version"
:
"5.2.1"
,
"resolved"
:
"https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz"
,
"integrity"
:
"sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw=="
,
"requires"
:
{
"gaxios"
:
"^4.0.0"
,
"google-p12-pem"
:
"^3.0.3"
,
"jws"
:
"^4.0.0"
}
},
"has-flag"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
,
...
...
@@ -275,6 +404,30 @@
"statuses"
:
">= 1.4.0 < 2"
}
},
"https-proxy-agent"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz"
,
"integrity"
:
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="
,
"requires"
:
{
"agent-base"
:
"6"
,
"debug"
:
"4"
},
"dependencies"
:
{
"debug"
:
{
"version"
:
"4.3.1"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"
,
"integrity"
:
"sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="
,
"requires"
:
{
"ms"
:
"2.1.2"
}
},
"ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"iconv-lite"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz"
,
...
...
@@ -293,6 +446,11 @@
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"integrity"
:
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-stream"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz"
,
"integrity"
:
"sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
},
"jake"
:
{
"version"
:
"10.8.2"
,
"resolved"
:
"https://registry.npmjs.org/jake/-/jake-10.8.2.tgz"
,
...
...
@@ -304,6 +462,41 @@
"minimatch"
:
"^3.0.4"
}
},
"json-bigint"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz"
,
"integrity"
:
"sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="
,
"requires"
:
{
"bignumber.js"
:
"^9.0.0"
}
},
"jwa"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz"
,
"integrity"
:
"sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA=="
,
"requires"
:
{
"buffer-equal-constant-time"
:
"1.0.1"
,
"ecdsa-sig-formatter"
:
"1.0.11"
,
"safe-buffer"
:
"^5.0.1"
}
},
"jws"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/jws/-/jws-4.0.0.tgz"
,
"integrity"
:
"sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg=="
,
"requires"
:
{
"jwa"
:
"^2.0.0"
,
"safe-buffer"
:
"^5.0.1"
}
},
"lru-cache"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
"integrity"
:
"sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
,
"requires"
:
{
"yallist"
:
"^4.0.0"
}
},
"media-typer"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
,
...
...
@@ -367,6 +560,16 @@
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"integrity"
:
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"node-fetch"
:
{
"version"
:
"2.6.1"
,
"resolved"
:
"https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz"
,
"integrity"
:
"sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"node-forge"
:
{
"version"
:
"0.10.0"
,
"resolved"
:
"https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz"
,
"integrity"
:
"sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
},
"on-finished"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
...
...
@@ -502,6 +705,11 @@
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"yallist"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
,
"integrity"
:
"sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}
...
...
package.json
View file @
3762470
...
...
@@ -10,6 +10,7 @@
"debug"
:
"~2.6.9"
,
"ejs"
:
"^3.1.6"
,
"express"
:
"^4.16.4"
,
"google-auth-library"
:
"^7.0.4"
,
"http-errors"
:
"~1.6.3"
,
"morgan"
:
"~1.9.1"
}
...
...
routes/index.js
View file @
3762470
var
express
=
require
(
'express'
);
var
router
=
express
.
Router
();
var
{
OAuth2Client
}
=
require
(
'google-auth-library'
);
var
CLIENT_ID
=
"94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com"
var
client
=
new
OAuth2Client
(
CLIENT_ID
);
/* GET home page. */
router
.
get
(
'/'
,
function
(
req
,
res
,
next
)
{
res
.
render
(
'index'
,
{
title
:
'Express'
});
res
.
render
(
'index'
,
{
d
:
"94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com"
});
});
router
.
get
(
'/index'
,
function
(
req
,
res
,
next
)
{
res
.
render
(
'index'
,
{
d
:
"94679084723-s5f0686p2porp9mkakrp1p89a48n24nj.apps.googleusercontent.com"
});
});
router
.
post
(
'/index'
,
(
req
,
res
)
=>
{
let
token
=
req
.
body
.
token
;
async
function
verify
()
{
const
ticket
=
await
client
.
verifyIdToken
({
idToken
:
token
,
audience
:
CLIENT_ID
,
// Specify the CLIENT_ID of the app that accesses the backend
});
}
verify
()
.
then
(()
=>
{
res
.
cookie
(
'session-token'
,
token
);
res
.
send
(
'success'
)
})
.
catch
(
console
.
error
);
});
router
.
get
(
'/login'
,
checkAuthenticated
,
(
req
,
res
)
=>
{
let
user
=
req
.
user
;
res
.
render
(
'login'
,
{
user
})
});
module
.
exports
=
router
;
function
checkAuthenticated
(
req
,
res
,
next
){
let
token
=
req
.
cookies
[
'session-token'
];
let
user
=
{};
async
function
verify
()
{
const
ticket
=
await
client
.
verifyIdToken
({
idToken
:
token
,
audience
:
CLIENT_ID
,
// Specify the CLIENT_ID of the app that accesses the backend
});
const
payload
=
ticket
.
getPayload
();
user
.
name
=
payload
.
name
;
user
.
email
=
payload
.
email
;
user
.
picture
=
payload
.
picture
;
console
.
log
(
user
.
name
);
}
verify
()
.
then
(()
=>
{
req
.
user
=
user
;
next
();
})
.
catch
(
err
=>
{
res
.
redirect
(
'/login'
)
})
}
\ No newline at end of file
...
...
views/index.ejs
View file @
3762470
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"UTF-8"
>
<script
src=
"https://apis.google.com/js/platform.js"
async
defer
></script>
<meta
name=
"google-signin-client_id"
content=
<%=d%
>
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<title>
<
%= d%>
</title>
<link
rel=
'stylesheet'
href=
'/stylesheets/style.css'
/>
</head>
<body>
<h1>
Login
</h1>
<div
class=
"g-signin2"
data-onsuccess=
"onSignIn"
></div>
<a
href=
"#"
onclick=
"signOut();"
>
Sign out
</a>
</body>
<script>
function
onSignIn
(
googleUser
)
{
var
id_token
=
googleUser
.
getAuthResponse
().
id_token
;
//console.log(id_token);
var
xhr
=
new
XMLHttpRequest
();
xhr
.
open
(
'POST'
,
'/index'
);
xhr
.
setRequestHeader
(
'Content-Type'
,
'application/json'
);
xhr
.
onload
=
function
()
{
console
.
log
(
'Signed in as: '
+
xhr
.
responseText
);
if
(
xhr
.
responseText
==
'success'
){
signOut
();
location
.
assign
(
'/login'
)
}
};
xhr
.
send
(
JSON
.
stringify
({
token
:
id_token
}));
}
function
signOut
()
{
var
auth2
=
gapi
.
auth2
.
getAuthInstance
();
auth2
.
signOut
().
then
(
function
()
{
console
.
log
(
'User signed out.'
);
});
}
</script>
</html>
...
...
views/login.ejs
0 → 100644
View file @
3762470
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<title>
logined
</title>
</head>
<body>
<a
href=
"/index"
onclick=
"signOut();"
>
Sign Out
</a>
<h1>
Hi
<
%= user.name %>
</h1>
</body>
<script>
function
signOut
()
{
var
auth2
=
gapi
.
auth2
.
getAuthInstance
();
auth2
.
signOut
().
then
(
function
()
{
console
.
log
(
'User signed out.'
);
});
}
</script>
</html>
\ No newline at end of file
Please
register
or
login
to post a comment