【发布时间】:2021-10-16 09:28:56
【问题描述】:
我正在尝试构建小型应用程序,我将前端来源放在白名单中,但仍然无法获取数据或登录。 我将它部署在 heruko 上的后端和 gh-pages 上的前端 在我在本地主机上部署前端和后端之前,通过将前端的本地主机源添加到白名单中,一切正常
这是我的 cors.js 代码
const express = require('express');
const cors = require('cors');
const app = express();
const whitelist = ['FRONTEND_ORIGIN'];
var corsOptionsDelegate = (req, callback) => {
var corsOptions;
console.log(req.header('Origin'));
if(whitelist.indexOf(req.header('Origin')) !== -1) {
corsOptions = { origin: true };
}
else {
corsOptions = { origin: false };
}
callback(null, corsOptions);
};
exports.cors = cors();
exports.corsWithOptions = cors(corsOptionsDelegate);
登录代码
export const loginUser = (creds) => (dispatch) => {
return fetch(baseUrl + 'users/login', {
method: 'POST',
headers: {
'Content-Type':'application/json'
},
body: JSON.stringify(creds)
})
.then(response => {
if (response.ok) {
return response;
} else {
var error = new Error('Error ' + response.status + ': ' + response.statusText);
error.response = response;
throw error;
}
},
error => {
throw error;
})
.then(response => response.json())
.then(response => {
if (response.success) {
........
}
else {
var error = new Error('Error ' + response.status);
error.response = response;
throw error;
}
})
.catch(error => dispatch(loginError(error.message)))
};
登录用户路由器
var express = require('express');
const bodyParser = require('body-parser');
var User = require('../models/user');
var router = express.Router();
var passport = require('passport');
var authenticate = require('../authenticate');
const cors = require('./cors');
router.use(bodyParser.json());
router.options('*', cors.corsWithOptions, (req, res) =>{res.sendStatus(200);})
router.post('/login', cors.corsWithOptions, (req, res, next) => {
passport.authenticate('local', (err, user, info) => {
if (err)
return next(err);
if (!user) {
res.statusCode = 401;
res.setHeader('Content-Type', 'application/json');
res.json({success: false, status: 'Login Unsuccessful!', err: info});
}
req.logIn(user, (err) => {
if (err) {
res.statusCode = 401;
res.setHeader('Content-Type', 'application/json');
res.json({success: false, status: 'Login Unsuccessful!', err: 'Could not log in user!'});
}
var token = authenticate.getToken({_id: req.user._id});
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json({success: true, status: 'Login Successful!', token: token, userId: req.user._id, firstname: req.user.firstname, lastname: req.user.lastname, image: req.user.image});
});
}) (req, res, next);
});
............
module.exports = router;
【问题讨论】:
标签: node.js reactjs heroku cors github-pages