JSON авторизация через webtoken для реакции и express защищенных маршрутов - PullRequest
0 голосов
/ 21 января 2020

Я изо всех сил пытаюсь создать систему входа в систему, используя JSON веб-токены.

Я сделал вход (на стороне клиента), который вызывает мой сервер. js file.

Это логин через клиентскую часть. Ниже описана функция отправки дескриптора, которая вызывает сервер. js route login. Как мне использовать токен здесь?


  handleSubmit(e) {
    e.preventDefault();
    if (this.state.email.length < 8 || this.state.password.length < 8) {
      alert(`please enter the form correctly `);
    } else {
      const data = { email: this.state.email, password: this.state.password };

      fetch("/login", {
        method: "POST", // or 'PUT'
        headers: {
          Accept: "application/json, text/plain, */*",
          "Content-Type": "application/json"
        },
        body: JSON.stringify(data)
      })
        .then(data => {
          console.log("Success:", data);
        })

        .catch(error => {
          console.error("Error:", error);
        });
    }
  }
  catch(e) {
    console.log(e);
  }

Это маршрут входа на мой сервер. js. Как вы можете видеть, я назначил jwt, но как мне отослать его обратно в форму входа в систему и использовать его для защищенных маршрутов.

app.post("/login", async (req, response) => {
  try {
    await sql.connect(config);

    var request = new sql.Request();
    var Email = req.body.email;
    var Password = req.body.password;

    console.log({ Email, Password });

    request.input("Email", sql.VarChar, Email);
    request.input("Password", sql.VarChar, Password);

    const result = await request.execute("dbo.LoginUser");

    if (result.recordsets[0].length > 0) {
      console.info("/login: login successful..");
      console.log(req.body);

      const token = jwt.sign({ user: Email }, "SECRET_KEY", {
        expiresIn: 3600000
      });

      var decoded = jwt.verify(token, "SECRET_KEY");
      console.log(decoded);

      response.status(200).json({
        ok: true,
        user: Email,
        token: token
      });

      console.log(token);
    } else {
      console.info("/login: bad creds");
      response.status(400).send("Incorrect email and/or Password!");
    }
  } catch (err) {
    console.log("Err: ", err);
    response.status(500).send("Check api console.log for the error");
  }
});

По сути, все, что я хочу, - это чтобы мой обработчик отправки вызывался для входа в систему. , Сервер возвращает токен jwt, который затем можно использовать для проверки других маршрутов.

1 Ответ

1 голос
/ 21 января 2020

Существует два способа маршрутизации:

  1. Используйте React-Redux и реагирующий маршрутизатор.
  2. Сохраните извлеченный токен JWT в localStorage и используйте его для проверки маршрута в вашем компоненте маршрутов.

Я бы рекомендовал использовать React-Redux / React-router для защищенной маршрутизации. Вот видео-ссылка на Создание реального веб-приложения с React от Рема Золотых

Это поможет вам.

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