Узел угловой JWT постоянное соединение - PullRequest
0 голосов
/ 20 апреля 2019

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

Поэтому я пытаюсь получить постоянный токен.с использованием местного хранилища.но это не сработало.

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

Код для входа в NodeJS

exports.login = (req, res, next) => {
    Userbo.findOne({ email: req.body.email }).then(
      (userbo) => {
        if (!userbo) {
          return res.status(401).json({
            error: new Error('User not found!')
          });
        }
        bcrypt.compare(req.body.password, userbo.password).then(
          (valid) => {
            if (!valid) {
              return res.status(401).json({
                error: new Error('Incorrect password!')
              });
            }
            const token = jwt.sign(
              { userId: userbo._id },
              'RANDOM_TOKEN_SECRET',
              { expiresIn: 7200 });
            res.status(200).json({
              userId: userbo._id,
              token: token,
              role : userbo.role,
              expiresIn: 7200,
            });
          }
        ).catch(
          (error) => {
            res.status(500).json({
              error: error
            });
          }
        );
      }
    ).catch(
      (error) => {
        res.status(500).json({
          error: error
        });
      }
    );
  }

Angular auth.service

login(email: string, password: string) {
    return new Promise((resolve, reject) => {
      this.http.post(
        'http://localhost:3000/api/authbo/login',
        { email: email, password: password })
        .subscribe(
          (authData: { token: string, userId: string, role: string, expiresIn: Number }) => {
            this.token = authData.token;
            this.userId = authData.userId;
            localStorage.setItem('id_token', authData.token);
            const expiresAt = moment().add(authData.expiresIn.valueOf(), 'second');
            localStorage.setItem("expires_at", JSON.stringify(expiresAt.valueOf()));

            this.role = authData.role;
            this.isAuth$.next(true);
            console.log('LOGIN' + this.isAuth$);
            resolve();
          },
          (error) => {
            reject(error);
          }
        );
    });
  }

  logout() {
    this.isAuth$.next(false);
    this.userId = null;
    this.token = null;
    this.role = null;
    localStorage.removeItem("id_token");
    localStorage.removeItem("expires_at");
  }

    public isLoggedIn() {
      return moment().isBefore(this.getExpiration());
    }
    getExpiration() {
      const expiration = localStorage.getItem("expires_at");
      const expiresAt = JSON.parse(expiration);
      return moment(expiresAt);
    }

Я не знаю, хорошо ли создан токен?кто-нибудь может мне помочь?:)

...