Запретить повторный вход в систему после нажатия кнопки «Выход»

#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')
      })
    }