节点角JWT持久连接

时间:2019-04-20 12:59:52

标签: node.js angular express jwt

我有一个问题,我的所有JWT管理都没有令牌,但是重新加载时我失去了所有身份验证。

所以我正在尝试获取永久令牌。使用本地存储。但这没用。

我正在尝试检查令牌持续时间是否正确。我认为我的代码是正确的,但不知道错误在哪里。我认为它在auth服务中。但是我不知道为什么。

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
        });
      }
    );
  }

角度身份验证服务

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);
    }

我不知道令牌创建得好吗?有人可以帮助我吗? :)

0 个答案:

没有答案