Ionic + Passport isAuthenticated () возвращает false - PullRequest
0 голосов
/ 20 мая 2018

У меня есть приложение на angularJs 1.6, созданное с использованием стека MEAN, я использую паспорт для аутентификации.

Когда я решаю проверить его с помощью ionic, само приложение работает хорошо (файлы в основном идентичны) но аутентификация с паспортом не работает

Я могу зарегистрироваться и войти в систему пользователя, но когда я хочу проверить, зарегистрирован ли пользователь с помощью req.isAuthenticated () на моем сервере, он всегда отвечает false.

Я думаю, это потому, что когда я делаю запрос из моего обычного углового приложения, запрос содержит объект пользователя с паролем и электронной почтой, но когда я делаю это из моего ионного приложения, пользователь пропускает

Difference between the two requests

Я провел день, работая над этим, любая помощь была бы отличной!

РЕДАКТИРОВАТЬ 1:

Извините, что не включилкод, это мой первый опыт здесь

Мой маршрут входа в систему + моя функция для входа в систему

 app.post('/api/login', login);

function login(req, res, next) {
//console.log(req);
passport.authenticate('local-login', function(err, user, info) {
  if (err) {
    return next(err); // will generate a 500 error
  }
  // Generate a JSON response reflecting signup
  if (! user) {
    return res.send({success : 'false', message : req.flash('loginMessage') });
  }

  req.login(user, function(err) {
    if (err) { return next(err); }
      //console.log(req);
    return res.send({success : 'true', message : req.flash('loginMessage') });
  });

})(req, res, next);
}

Проблема в том, что req.login выполнен, и я получаю успех: правда, но сприложение ionic / cordova, кажется, ничегобыть запомненным

После этого, когда я пытаюсь проверить, зарегистрирован ли пользователь с этим

  app.get('/api/login/loggedin', function(req, res) {
    res.send(req.isAuthenticated() ? req.user : '0');
  });

, я всегда получаю '0', я думаю, что это потому, что приложение Cordova / Ionic не можетиспользовать cookie-файлы (разница между запросами также заключается в отсутствии cookie-файлов от ionic), но я не могу понять, как управлять решением, которое работает как с моим угловым веб-приложением, так и с его ионной версией (все еще с паспортом)

1 Ответ

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

Решение, которое я только что нашел:

На самом деле это была проблема CORS, потому что я точно не знаю, почему, но Ionic / cordova не поместил {user:...} информацию в запросе на публикацию

Просто добавьте

var cors = require('cors');
app.use(cors({origin: 'http://localhost:8100', credentials: true}));

на ваш сервер, это позволит req содержать необходимую информацию

и добавить

{withCredentials: true}

ко всем вашим запросам, которые собираютсябыть проверенным с isAuthenticated ()Например:

$http.get('http://localhost:8081/api/todos', {withCredentials: true});

Итак, отправленный запрос содержит часть {user: ...}

Я точно не знаю, почему вам нужно авторизовать его как на стороне клиента, так и на стороне сервера.но работает нормально

...