#javascript #node.js #fetch
Вопрос:
Я написал несколько строк кода для аутентификации google, используя Node Js и javascript.
Когда я нажимаю на кнопку «Выйти» на странице панели мониторинга, она автоматически перенаправляет меня на вход, а затем обратно на панель мониторинга.
Но я хочу, чтобы пользователь вошел на страницу входа и оставался там до тех пор, пока пользователь снова не нажмет на вход в Google
Я что-то упустил в извлечении?
//src.js
function onSignIn(googleUser) {
var id_token = googleUser.getAuthResponse().id_token;
fetch('/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
token: id_token
})
})
.then(response => {
console.log(response);
})
.then(() => {
location.assign('/dashboard')
})
}
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
dashboard.ejs
<%- include('includes/header.ejs') %>
<title>Document</title>
</head>
<body>
<h1>Dashboard page</h1>
<!-- <div class="g-signin2" data-onsuccess="onSignIn"></div> -->
<a href="/logout" onclick="signOut">Sign out</a>
<h2><%= user.name %></h2>
<img src="<%= user.picture %>" alt="">
<%- include('includes/footer.ejs') %>
//Header.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="google-signin-client_id" content="***Masked***" async defer></script>
//Server.js
const cookieParser = require('cookie-parser')
const express = require('express')
const app = express()
const PORT = process.env.PORT || 3000
//Google Auth
const {OAuth2Client} = require('google-auth-library');
const CLIENT_ID ='4***Masksed'
const client = new OAuth2Client(CLIENT_ID);
//Middleware
app.set('view engine', 'ejs')
app.use(express.static(__dirname '/public'));
app.use(express.json())
app.use(cookieParser())
app.get('/', (req, res, next) => {
res.render('index')
})
app.get('/login', (req, res) => {
console.log("Enter into login get request");
res.render('login')
})
app.listen(PORT, () => {
console.log(`Listenting on PORT ${PORT}`);
})
app.post('/login',async (req, res, next) => {
let token = req.body.token
async function verify() {
try{
const ticket = await client.verifyIdToken({
idToken: token,
audience: CLIENT_ID
});
const payload = ticket.getPayload();
console.log("Got payload");
const userid = payload['sub'];
}
catch(e){
console.log(e);
}
}
try{
const test = await verify()
res.cookie('session-token', token)
res.send('success')
console.log("Return success");
}
catch(e){
console.log(e);
}
})
app.get('/dashboard', checkauthenticated, (req, res) => {
let user = req.user
console.log(user);
res.render('dashboard', {user})
})
app.get('/protectedroute', checkauthenticated, (req, res) => {
res.render('protectedroute')
})
app.get('/logout', (req, res) => {
res.clearCookie('session-token')
res.redirect('/login')
})
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;
}
verify()
.then(()=>{
req.user = user;
next();
})
.catch(err=>{
res.redirect('/login')
})
}