Passport.js, ошибка Auth0 CORS - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь настроить одностраничное приложение, используя 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));

Это тоже не сработало.

1 Ответ

0 голосов
/ 18 мая 2018

URL-адрес в сообщении об ошибке показывает, что вы вызываете маршрут '/ callback', но я не вижу такой маршрут в вашем коде.

В качестве примечания можно попробовать скважинуизвестный пакет nors

...