Я пытаюсь настроить одностраничное приложение, используя Angular 5 и Express, которое аутентифицируется с помощью Passport.js и Auth0.Я продолжаю получать эту ошибку, когда я пытаюсь войти в систему:
Не удалось загрузить https://example.auth0.com/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback&client_id=example: Ответ на предварительный запрос не проходит проверку контроля доступа: Нет 'Access-Control-Allow-Заголовок источника присутствует на запрашиваемом ресурсе.Поэтому для источника 'null' доступ запрещен.
Согласно решению, приведенному здесь , похоже, что обратный вызов неправильный, но я не понимаю, почемуошибка CORS из-за неправильного обратного вызова или если это даже относится к одностраничному приложению.
В настоящее время в dev я запускаю мое приложение Angular на localhost: 8080, а мой сервер на localhost:3000.Очевидно, что в какой-то момент мне нужно будет запустить их обоих на одном сервере, но, может быть, это вызывает проблемы? ...
Я пробовал несколько вещей на странице настроек Auth0, но не уверен, чтоввести в поля для URL-адресов обратного вызова, разрешенных веб-источников и разрешенных источников (CORS).
var express = require('express');
var passport = require('passport');
var Auth0Strategy = require('passport-auth0');
var db = require('./db');
const CLIENT_ORIGIN = 'http://localhost:8080';
const SERVER_PORT_NUMBER = 3000;
passport.use(new Auth0Strategy({
domain: 'example.auth0.com',
clientID: 'example',
clientSecret: '7Jk3OdKOgWEKta8UFSrAU6lD04kPizC9aT0x6M8FlY1R7QTtJk_vqutYdfk3gUul',
callbackURL: '/callback',
},
function(accessToken, refreshToken, extraParams, profile, cb) {
return done(null, profile);
}
));
passport.serializeUser(function(user, cb) {
cb(null, user.email);
});
passport.deserializeUser(function(email, cb) {
db.users.findByEmail(email, function(err, user) {
if (err) {
return cb(err);
}
cb(null, user);
});
});
var app = express();
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
next();
});
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', CLIENT_ORIGIN);
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
// Configure view engine to render EJS templates.
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({
extended: true
}));
app.use(require('express-session')({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.get('/',
function(req, res) {
res.render('home', {
user: req.user
});
});
app.get('/user/login',
function(req, res) {
res.render('login');
});
app.get('/callback',
function(req, res) {
console.log('test);
});
app.post('/user/login',
passport.authenticate('auth0', {
failureRedirect: '/login'
}),
function(req, res) {
res.redirect('/');
});
app.get('/user/logout',
function(req, res) {
req.logout();
res.redirect('/');
});
app.get('/user/profile',
require('connect-ensure-login').ensureLoggedIn(),
function(req, res) {
res.render('profile', {
user: req.user
});
});
app.listen(SERVER_PORT_NUMBER);
ОБНОВЛЕНИЕ: Я также пробовал npm cors, как предлагалось:
const corsOptions = {
origin: '*',
methods: 'GET,POST,OPTIONS,PUT,PATCH,DELETE',
allowedHeaders: 'X-Requested-With,content-type',
credentials: true,
}
app.use(cors(corsOptions));
Это тоже не сработало.