【问题标题】:How can I generate the token?如何生成令牌?
【发布时间】:2019-05-16 18:26:34
【问题描述】:

我正在尝试在用户创建帐户时生成令牌,但我似乎得到了一个空集?有什么问题?语法有什么问题吗?

这是控制器文件:

import moment from 'moment';
import uuidv4 from 'uuidv4';
import db from '../db/index';
import Helper from '../middleware/helper';


const users = {

  async createAccount(req, res) {
    if (!req.body.email || !req.body.password) {
      return res.status(400).send({ 'message': 'Some values are missing' });
    }
    if (!Helper.isValidEmail(req.body.email)) {
      return res.status(400).send({ 'message': 'Please enter a valid email address' });
    }
    const hashPassword = Helper.hashPassword(req.body.password);

    const createQuery = `INSERT INTO
      users (id, firstName, lastName, otherNames, email, phoneNumber, userName, registered, isAdmin, password)
      VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
      returning *`;
    const values = [
      uuidv4(),
      req.body.firstName,
      req.body.lastName,
      req.body.otherNames,
      req.body.email,
      req.body.phoneNumber,
      req.body.userName,
      moment(new Date()),
      req.body.isAdmin,
      hashPassword,
    ];

    try {
      const { rows } = await db.query(createQuery, values);
      const token = Helper.generateToken(rows[0].id);
      return res.status(201).send({ token });
    } catch (error) {
      if (error.routine === '_bt_check_unique') {
        return res.status(400).send({ 'message': 'User with that EMAIL already exist' });
      }
      return res.status(400).send(error);
    }
  },

这里是 Helper utils 文件: 这是我具有生成令牌功能的文件。

import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';

const Helper = {

  generateToken(id) {
    const token = jwt.sign(id, process.env.SECRET, { expiresIn: '7d' });
    return token;
  },
};

export default Helper;

【问题讨论】:

  • 有什么错误吗?您是否检查了 rows[0].id 内是否有值?你检查 process.env.SECRET 是否有价值?
  • 您的用户是否已插入数据库?
  • 这里的id是什么值?
  • @sawim 是的
  • @MarkMeyer 一个我使用 uuid 生成的

标签: javascript node.js express jwt bcrypt


【解决方案1】:

我相信你的 id 需要是一个对象。 来自docs:

var token = jwt.sign({ foo: 'bar' }, 'shhhhh');

试试

var token = jwt.sign({id: id}, process.env.SECRET, {expiresIn: '7d'});

【讨论】:

  • 嘿,我实际上没有密钥,我笨。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2010-12-20
  • 2021-07-29
  • 2011-02-22
相关资源
最近更新 更多