我有一个创建新用户的简单表单。
用户输入其凭据, 在后端,这些凭据经过验证,保存在数据库中,并生成身份验证令牌。 最后,作为响应,用户名,电子邮件和令牌将返回给客户端。因此前端可以管理事物。
代码:
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.' })
}
}
好吧,从这里我想要两件事:
//编辑// 我的输入表格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>