我正在尝试为我的电子应用程序构建 Oauth 登录,但是当我尝试使用 Axios 发出请求 GET 来检查用户是否已经登录时,它拒绝工作。当我在我的反应项目上测试请求时,它看起来工作正常。
这是 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;
问题是你不能在主加载或预加载中使用带会话的axios,需要在浏览器窗口加载的index.js文件中调用axios函数。