ElectronJS,如何验证用户是否直接从主进程登录后端快速会话

问题描述 投票:0回答:0

我无法找到我无法使用我的电子应用程序检查会话的地方。我的应用程序由客户端站点(main.js、preload.js 和渲染器(当然还有一些 html 文件))和带有 Express 的 node.js 后端组成。所有工作都很好,除了一种情况:当用户启动应用程序时,验证一个用户是否在后端有一个自动登录会话。这是 main.js(客户端)文件:

axios.get('http://localhost:9090/oauth/express-session-exist')
.then(response => {
  if (response.data.success) {
    const userIsConnected = store.get('user_publickey');
    if (userIsConnected) {
      if (store.get('user_active') == 'false') {
     mainWindow.loadFile('discovery.html');
      } else {
    mainWindow.loadFile('app.html');
      }
    } else {
      mainWindow.loadFile('oauth.html');
    }
   } else {
     const userIsConnected = store.get('user_publickey');
     if (userIsConnected) {
       store.clear();
     }
     mainWindow.loadFile('oauth.html');
   }
})
.catch(error => {
  console.error(error);
  mainWindow.loadFile('oauth.html');
});

这是后端功能:

router.get('/express-session-exist', (req, res) => {
  if (req.session.user) {
    res.json({ success: true, data: req.session.user });
  } else {
    res.json({ success: false });
  }
});

我很确定当我第一次使用这个后端功能登录我的用户时,会话创建得很好:

  // Login
  router.post('/login', async (req, res) => {
    const { email, password } = req.body;
    try {
      const existingUser = await oauthModel.findUserByEmail(email);
      if (existingUser) {
        const passwordMatch = await bcrypt.compare(password, existingUser.user_password);
        if (passwordMatch) {

          // Here, i created the express-session and put in value, then return the value to
          // Electron. A console.log() in the client show prefectly the data of the session.

          req.session.user = {
            publickey: existingUser.user_publickey,
            regenerativekey: existingUser.user_regenerativekey,
            email: existingUser.user_email,
            alias: existingUser.user_alias,
          };


          const toElectron = req.session.user;
          res.status(200).json({ success: true, message: 'user-logged-in', user: toElectron });
        } else {
          res.status(401).json({ success: false, message: 'wrong-password' });
        }
      } else {
        res.status(401).json({ success: false, message: 'cant-find-email' });
      }
    } catch (error) {
      console.log(error)
      res.status(500).json({ success: false, message: 'ie500', error });
    }
  });

我不知道从哪里看这一点,AXIOS 发送带有 cookie 的请求所以我不知道...感谢阅读我的文章。

有关信息,这是我的 app.js:

  
  // app.js

  // Express setup
  const express = require('express');
  const session = require('express-session');
  const app = express();
  const port = 9090;

  // Chargement des modules
  const http = require('http');
  const server = http.createServer(app);
  const cors = require('cors');
  const bodyParser = require('body-parser');

  // Utiliser les sessions
  const sessionMiddleware = session({
    secret: 'mySecret',
    resave: true,
    saveUninitialized: true,
    cookie: {
      sameSite: 'Lax',
      maxAge: 1000 * 60 * 60 * 24 * 1000,
      secure: false // CARE PRODUCTION
    }
  });
  
  app.use(express.static('public'));
  app.use(cors({
    origin: ['http://localhost:9090'],
    credentials: true
  }));
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(bodyParser.json());
  app.use(sessionMiddleware);
  
  // Declaration Controllers
  const oauthController = require('./controllers/oauth');

  // Use Controllers
  app.use('/oauth', oauthController);

  server.listen(port, () => {
    console.log(`Server listening :${port}`);
  });

我希望我的路线

/express-session-exist
看到会话已创建并返回 true。但她不断地返回错误。

javascript express electron express-session
© www.soinside.com 2019 - 2024. All rights reserved.