Поддержка экспресс-сеансов при перемещении между статическими и динамическими страницами на стороне клиента - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь настроить экспресс-сеансы для аутентификации пользователя.У меня есть серверная часть node.js, а также угловой и статический внешний интерфейс страницы (два внешних интерфейса).

Мой внутренний серверный узел принимает имя пользователя и пароль для аутентификации на моем маршруте в качестве запроса после отправки http://localhost:3000/users/login

Мое путешествие выглядит следующим образом:
1.Пользователю предоставляется статическая страница входа в систему переднего плана (это делается путем внедрения vue.js с помощью axios на статическую HTML-страницу), где он запрашивает вход со своими учетными данными.Клиентский интерфейс размещен на http://localhost:3011/
2.Теперь приложение отправит запрос на сообщение http://localhost:3000/users/login для проверки учетных данных.
3.Если учетные данные действительны, сервер создаст новый сеанс (экспресс-сеанс), используя req.session.В этом сеансе я также храню свой токен, который я использую для аутентификации пользователя для любых последующих запросов (этот токен сохраняется в БД и проверяется для всех дальнейших запросов).Затем сервер ответит 200 OKAY.
4.Как только приложение vue получит положительный ответ, клиент перенаправит приложение на http://localhost:3000/, где у меня есть угловое приложение в папке dist.

Если в POSTMAN я отправлю сообщение на http://localhost:3000/users/login, а затем выполню GET на http://localhost:3000/, я смогу увидеть токен в журналах, когда сервер ответит на запрос GET.
Но если я отправлю почтовый запрос на http://localhost:3000/users/login из моего приложения vue, а затем перенаправлю на http://localhost:3000/ при успешной аутентификации, я не смогу увидеть токен в журналах.

Фрагмент кода наклиентская часть (Vue)

submit() {
      this.errMsg = "";
      axios
        .post("http://localhost:3000/users/login", {
          user: this.user,
          password: this.password
        })
        .then(response => {
          window.location = "http://localhost:3000/";
        })
        .catch(err => {
          console.log(err);
          this.errMsg = err.data.statusText;
        });
    }

код внутри логина на стороне сервера

router.route("/login").post((req, res) => {
  let { user, password } = req.body;
  merchant_table
    .findOne({ attributes: ["id"], where: { email, password } })
    .then(result => {
      if (result) {
        let token = 12345;
        token_table
          .create({ m_id: result.id, token })
          .then(result => {
            req.session.user = result.token;
            console.log("session is", req.session); //THIS SHOWS THE TOKEN
            res.status(200).json({status:"OKAY!"})
          });
      } else {
        res.status(401).json({status:"Invalid User!"})
      }
    })
    .catch(error => console.log(error));
});

код внутри API запроса для http://localhost:3000/

app.use("/", function(req, res) {
  console.log("Session is", req.session); //THIS SHOWS THE TOKEN FOR POSTMAN, NOT WHEN WORKING WITH VUE
  res.sendFile(__dirname + "/dist/index.html");
});

начиная с аксиосаотправка запроса и последующее перенаправление на http://localhost:3000/ Я ожидал, что токен будет сохранен.Но похоже, что это новая связь.Это неправильный подход?Есть ли способ отслеживать токен при перенаправлении?Мне нужен токен только один раз, потому что тогда я буду хранить его в угловом приложении и отправлять для любых других запросов, которые мне нужны.Как мне поступить с этим?

...