如何修复 Axios GET 请求不适用于 Electron.js

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

我正在尝试为我的电子应用程序构建 Oauth 登录,但是当我尝试使用 Axios 发出请求 GET 来检查用户是否已经登录时,它拒绝工作。当我在我的反应项目上测试请求时,它看起来工作正常。

Picture of error in the console

这是 main.js 文件:

const { app } = require('electron');
require('isomorphic-fetch');

const { createAuthWindow } = require('./main/auth-process');
const createAppWindow = require('./main/app-process');
const { getUserDetails } = require('../src/utils/api')


async function showWindow() {
  console.log('showWindow Started!');

  await getUserDetails()
    .then(response => {
      console.log(response.status);
      if (response.status === 200) {
        console.log('Success!');
        return createAppWindow();
      }
      else {
        createAuthWindow();
        throw new Error('Failed to authenticate user.');
      }
    })
}

app.on('ready', showWindow);

app.on('window-all-closed', () => {
  app.quit();
})

这是API请求:

const axios = require('axios');

function getUserDetails() {
  return axios.get('http://localhost:4000/', { withCredentials: true });
}

module.exports = { getUserDetails }

服务器上的Index.js

const cookieSession = require('cookie-session');
const express = require('express');
const app = express();
const port = 4000;
const passport = require('passport');
const passportSetup = require('./config/passport')
const session = require('express-session');
const authRoutes = require('./routes/auth-routes');
const mongoose = require('mongoose');
const keys = require('./config/keys');
const cors = require('cors');
const cookieParser = require('cookie-parser');

mongoose.connect(keys.MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})

app.use(
  cookieSession({
    name: 'session',
    keys: [keys.COOKIE_KEY],
    maxAge: 24 * 60 * 60 * 100
  })
)

app.use(cookieParser());

app.use(passport.initialize());

app.use(passport.session());

app.use(
  cors({
    origin: 'http://localhost:3000',
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
    credentials: true
  })
)

app.use('/auth', authRoutes);


app.get('/', (req, res) => {
  if (req.user) {
    res.send({ user: req.user });
  }
  else {
    res.status(401).send({ msg: 'Unauthorized' })
  }
})

app.listen(port, () => console.log(`Server is running on port ${port}!`));

身份验证路由文件

const router = require('express').Router();
const passport = require('passport');
const homeURL = 'http://localhost:3000';

router.get('/login/success', (req, res) => {
  if (req.user) {
    res.json({
      success: true,
      message: 'User has successfully authenticated.',
      user: req.user,
      cookies: req.cookies
    })
  } else {
    res.status(404).json({
      success: false,
    });
  }
})

router.get('/login/failed', (req, res) => {
  res.status(401).json({
    success: false,
    message: 'User failed to authenticate.'
  })
})

router.get('/logout', (req, res) => {
  req.logout();
  res.redirect(homeURL);
})

router.get('/osu', passport.authenticate('osu'));

router.get(
  '/osu/redirect',
  passport.authenticate('osu', {
    successRedirect: homeURL,
    failureRedirect: '/auth/login/failed'
  })
)

module.exports = router;
javascript reactjs axios electron passport.js
1个回答
0
投票

问题是你不能在主加载或预加载中使用带会话的axios,需要在浏览器窗口加载的index.js文件中调用axios函数。

© www.soinside.com 2019 - 2024. All rights reserved.