Доступ к файлам cookie процесса рендеринга по основному процессу электрона - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть некоторые проблемы с аутентификацией (с использованием файлов cookie и сессии) и моего электронного приложения

Вариант использования:

  1. Вход пользователя в систему
  2. Создан сеанс и сохранен файл cookie.(по модулю app-bl)

Я читал о electron-session и electron-cookies (https://electronjs.org/docs/all?query=coo#class-cookies), но ничего не работает.

Структура приложения:

electron-app
---express-app
------app-bl
------react-client

Версия электрона: 3.0.13

Я использовал это, чтобы использовать экспресс в электроне: https://github.com/frankhale/electron-with-express

Кажется, что основной процесс электронов не знает о файлах cookie, созданныхобработанный процесс.

электрон / main.js:

const electron = require('electron');
const { app, BrowserWindow, session } = electron

let mainWindow;

function createWindow() {
  const screenElectron = electron.screen;
  mainWindow = new BrowserWindow({
    show: false,
    autoHideMenuBar: true,
    icon: `${__dirname}/assets/icon.ico`
  });
  mainWindow.webContents.openDevTools();
  mainWindow.loadURL(`file://${__dirname}/index.html`);

  mainWindow.on("close", () => {
    mainWindow.webContents.send("stop-server");
  });
  mainWindow.once('ready-to-show', () => {
    mainWindow.show()
  })
  mainWindow.on("closed", () => {
    mainWindow = null;
  });
}

express-app / index.js:

const ev = require('express-validation');
const Path = require('path')

const Express = require('express')
const BodyParser = require('body-parser')
const CookieParser = require('cookie-parser');
const Session = require('express-session');

const App = require('./app/index.js')

// Init server
const express = Express()
const router = Express.Router()
const port = parseInt(process.argv[2]) || process.env.PORT || 5001
const ip = "0.0.0.0"

express.use(BodyParser.urlencoded({ extended: true }))
express.use(BodyParser.json())
express.use(CookieParser())
express.use(Session({
    key: 'sessionId',
    secret: 'key',
    resave: false,
    saveUninitialized: false,
    cookie: {
        expires: 600000
    }
}))

// Init Application
const app = App({ express, router })


// Static content
express.use(Express.static(Path.join(__dirname, './client/dist')))
express.use('/*', Express.static(Path.join(__dirname, './client/dist/index.html')))


// Error handler
express.use(function (err, req, res, next) {
    console.log(err)
    if (err instanceof ev.ValidationError) {
        return res.status(err.status).json({
            status: err.status,
            message: err.statusText
        });
    }
    return res.status(err.status).json({
        status: err.status,
        message: err.message
    });
});

(async () => {
    try {
        await app.init()
        const server = await app.start(ip, port);
        console.log("Server started http://%s:%s", ip, port)
    } catch (e) {
        console.log(e);
        process.exit(1);
    }
})()

И вот как я создаю сеанс после успешного входа в модуль app-bl :

async function loginHandler(req, res, next) {
    const username = req.body.username
    const password = req.body.password
    try {
        const user = await authService.login(username, password)
        req.session.userId = user.id;
        res.json({ user })
    } catch (error) {
        error.status = 500
        next(error)
    }
}

Мне удалось создать файлы cookie внутри основного процесса, и я вижу, чтоиспользуя console.log, но внутри devTools ничего не отображается, я попробовал этот код:

const mainSession = mainWindow.webContents.session
const cookie = {
  url: 'http://localhost:8000',
  name: 'sessionId',
  domain: 'localhost',
  expirationDate: 99999999999999
}
mainSession.cookies.set(cookie, (error) => {
  if (error) {
    console.error(error)
  }
})

mainSession.cookies.get({}, (error, cookies) => {
  console.log(cookies)
})

У меня такое ощущение, что я что-то здесь упускаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...