快递服务器。将不记名令牌发送到标头

时间:2020-08-25 00:43:37

标签: javascript node.js express http server

我有一个创建新用户的简单表单。

enter image description here

用户输入其凭据, 在后端,这些凭据经过验证,保存在数据库中,并生成身份验证令牌。 最后,作为响应,用户名,电子邮件和令牌将返回给客户端。因此前端可以管理事物。

代码:

router.post('/user/create', async (req, res) => {
    try {
        await sequelize.sync()

        // create new user on database
        const user = await User.create({
            id: shortid.generate(),
            ...req.body
        })

        const token = await user.genAuthToken()

        // create a user token.
        await Tokens.create({
            token,
            userId: user.id
        })

        res.status(201).send({ user, token })
    } catch (error) {
        res.status(400).send(error)
    }
})

好吧,我创建了另一条路线。 “读取用户”。如果该路由已通过身份验证,则会读取用户。 当我创建此路由和其他路由时,我使用Postman发送授权承载令牌。如果用户被授权,则他可以访问仪表板等,否则,不能。

代码:

router.get('/user/me', auth, async (req, res) => {
    res.send({ user: req.user, token: req.token })
})

授权中间件:

const auth = async (req, res, next) => {
    try {
        const token = req.header('Authorization').replace('Bearer ', '')
        const decoded = jwt.verify(token, 'qweasd')

        const userToken = await Tokens.findOne({ where: { userId: decoded._id, token } })
        const userId = userToken.userId
        const user = await User.findOne({ where: { id: userId } })

        if (!user) throw new Error()

        req.user = user
        req.token = token
        next()
    } catch (error) {
        res.status(401).send({ error: 'User not authenticated.' })
    }
}

好吧,从这里我想要两件事:

  1. 关于邮递员,我必须设置“授权载体”令牌,以便在创建新帐户时可以访问仪表板,对吗?好吧,我如何在邮递员以外进行此操作?
  2. 在表单上,​​我确实设置了属性:action =“ / user / create” method =“ POST”。当用户按下“提交”按钮时,会得到一个带有他的名字,电子邮件和令牌的json(他会重定向到/ user / create)。如何将用户重定向到/ dashboard以获取示例?

//编辑// 我的输入表格html:

        <form action="/user/create" method="POST">
            <input type="text" name="name" placeholder="name" required>
            <input type="text" name="email" placeholder="email" required>
            <input type="password" name="password" placeholder="password" required>
            <input class="submit" type="submit" value="Submit">
            </div>
            <!--upload avatar-->
        </form>

0 个答案:

没有答案