Отображение страницы профиля после регистрации и аутентификации JWT (nodejs express JWT) - PullRequest
0 голосов
/ 30 октября 2018

У меня проблемы с сайтом, созданным с помощью Express.

Вот как это должно работать:

  1. Пользователь регистрируется, и сервер сохраняет пользователя в базе данных mongoose
  2. Пользователю назначается токен JWT, который отправляется браузеру в заголовке ответа.
    1. Браузер берет заголовок и сохраняет его в локальном хранилище, чтобы использовать с последующими запросами.
    2. Затем пользователь перенаправляется на страницу своего профиля. Это достигается путем отправки еще одного AJAX-запроса при успешном обратном вызове первого запроса.

Моя проблема в том, что страница профиля не отображается, когда я вызываю res.render () в маршруте POST / loggedin , и я не уверен, почему, поскольку консоль регистрируется непосредственно перед res.render () работают, показывая, что запрос AJAX выполнен.

Вот серверные маршруты:

//homepage
app.get("/", (req, res) => {
  res.render("home.hbs");
});

//signup
app.post("/signup", urlencodedParser, (req, res, next) => {
  let body = _.pick(req.body, ['studentid', 'name', 'password', 'department']);
  let user = new User(body);

  user.save().then(() => {
    return user.generateAuthToken();
  }).then((token) => {
    res.header({'x-auth': token, studentid: req.body.studentid}).send(user);

  }).catch((err) => {
    res.status(400).send(err);
  })
})

//go to profile
app.post("/loggedin", authenticate, (req, res) => {
  console.log(`token: ${req.header('x-auth')}`)
  console.log(`name from database: ${req.user.name}`)
  res.render(`loggedIn.hbs`);
})

Вот javascript внешнего интерфейса, который срабатывает, когда пользователь отправляет форму:

$.ajax({
    url: "/signup",
    method: "POST",
    data: {
      name: name,
      studentid: studentid,
      department: department,
      password: password,
    },
    success: function (response, textStatus, xhr) {

        let auth = xhr.getResponseHeader('x-auth');
        let id = xhr.getResponseHeader('studentid');

        localStorage.setItem('x-auth', auth);
        localStorage.setItem('studentid', id);

        // redirect to loggedin pages
        $.ajax({
         url: "/loggedin",
         type: "POST",
         beforeSend: function(xhr){xhr.setRequestHeader('x-auth', auth);}, // send token with request
         success: function(page) {
           console.log('redirecting');
        },
        fail: function() {
          alert('Cannot log in, please try again later')
        }
      });
    },
    error: function (response, textStatus, xhr) {
      if(response.status == 400) {
        if(response.responseJSON.errmsg && response.responseJSON.errmsg.includes("E11000 duplicate key error collection")) {
          return alert("There is already a user with the same student id in the database.")
        }
        alert("Sign up failed, please try again later.")
      }
    }
    });

Любой совет будет принята с благодарностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...