Я пытаюсь настроить экспресс-сеансы для аутентификации пользователя.У меня есть серверная часть 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/
Я ожидал, что токен будет сохранен.Но похоже, что это новая связь.Это неправильный подход?Есть ли способ отслеживать токен при перенаправлении?Мне нужен токен только один раз, потому что тогда я буду хранить его в угловом приложении и отправлять для любых других запросов, которые мне нужны.Как мне поступить с этим?