所以我试着建立一个非常基本的用户登录。我试着创建一个用户,然后用这些凭据登录并取回一个JSON Web令牌。我被卡住的地方是试着比较密码,然后发送一个响应。
步骤:
创建用户:
1.输入电子邮件和密码
- salt/hash用户密码
1.将用户存储到数据库
1.返回成功
登录
1.按请求电子邮件值查找用户
1.如果找到,请比较密码
1.密码正确发送JSON Web令牌
- 用户模型**
email:{
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
}
- 用户路由**
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var bcrypt = require('bcryptjs');
// Create User
...
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("superSecret", salt, function(err, hash) {
user.password = hash;
user.save();
res.json({success: true, message: 'Create user successful'});
});
});
...
// Login
...
bcrypt.compare(req.body.password, 'superSecret', function(err, res) {
if(req.body.password != user.password){
res.json({success: false, message: 'passwords do not match'});
} else {
// Send JWT
}
});
所以这里的两个问题是,我不能发送一个响应,也不能比较密码。只是完全停留在这一点上,任何帮助将不胜感激。
6条答案
按热度按时间r1zk6ea11#
如doc中所述,应按如下方式使用
bcrypt.compare
:这里有一篇关于Password Authentication with Mongoose (Part 1): bcrypt的好文章
jpfvwuh42#
xwbd5t1u3#
如果您要在浏览器(HTML)中使用bcryptjs,则可以添加bcryptjs CDN来完成此操作。
内容分发网络-https://cdn.jsdelivr.net/npm/bcryptjs@2.4.3/dist/bcrypt.js
示例-
HTML-(在标签中的CDN上方添加)
联属萨摩亚-
如果要在Nodejs中执行相同操作
/**按如下方式导入库并使用与上面编写的函数相同的函数 */
oaxa6hgo4#
从我看来你的逻辑是正确的。
如果你使用的是mongoose,我建议你使用保存钩子。
用户架构
在您的路线中:
登录
创建用户
bmvo0sr55#
mlnl4t2r6#