我在过去几个月一直在节点中开发尝试理解框架,现在我实际上将尝试为多个设备制作应用程序。
我想使用一个节点项目作为api,它将处理所有发布和获取请求。
在另一个节点项目中,我将使用ajax和socket.io与节点api通信。
在手机android / ios或cordova中,我会让移动界面如上所述进行通信。
现在我已经解释了我的问题的背景,我将描述我的问题。
现在我有一个节点项目,它使用bcrypt加密密码以进行注册和登录。我还使用护照来建立会话和flash消息。
router.post('/login',
passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}),
function(req, res) {
res.redirect('/');
});
passport.use(new LocalStrategy(
function(username, password, done) {
db_functions.getUserByEmail(username,function(error, results) {
if (error) throw error;
bcrypt.compare(password, results[0].password, function(err, res) {
if(res === true){
return done(null,results[0])
} else {
return done(null, false, {message: 'Invalid password'})
}
});
})
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
console.log(id)
db_functions.getUserById(id,function(error, results) {
if (error) throw error;
done(error,results[0])
})
});
我在这里阅读http://passportjs.org/docs/overview,如果我要将我的节点项目用作API,我应该禁用会话,因此我会使用:
app.get('/api/users/me',
passport.authenticate('basic', { session: false }),
function(req, res) {
res.json({ id: req.user.id, username: req.user.username });
});
现在,我已禁用会话,为什么我应该继续使用护照?当用户登录时,我使用bcrypt注册并检查密码匹配。如果我删除它,是否意味着来自Web浏览器或移动设备的每个请求都必须传输用户和散列密码?< / p>
答案 0 :(得分:2)
// Calculating your age with your date of birth
// yob is the year of birth
var yob = parseInt(prompt('What ur date of birth', 1995));
function calcage (yob){
while ((yob[0] != 1 && yob[0] !=2) || (yob.length != 4)) {
// I don't understand why this is an infinite loop.
// while yob doesn't start with one
//or doesn't start with two or yob length is smaller than 4.
// Then ask the question again.
var yob = parseInt(prompt(' Please enter a valid date of birth. What your date of birth ', 1995));
}
var age = 2017 - yob;
return age;
}
var yourage = calcage(yob);
document.write("You are "+yourage+" years old");
是身份验证库,会话是授权的一部分 - 这是流程中的另一个步骤。您可以使用passport
发出令牌,例如passport
,而不是使用具有不同库的会话来验证这些令牌,例如jsonwebtoken
,或创建中间件函数来验证这些令牌在需要认证的路线上
ejwt
也是可扩展的,已经开发了许多插件,允许多种形式的身份验证来发布授权方法。
你不必使用它,它只是让它更容易一些。另一方面,你可能必须使用passport
。