Bog*_*iel 1 node.js passport.js
过去几个月我一直在 node 中进行开发以尝试理解该框架,现在我实际上将尝试为多个设备制作一个应用程序。
我想使用一个节点项目作为 api,它将处理所有 post 和 get 请求。
在另一个节点项目中,我将有一个 React Web 界面,通过 ajax 和 socket.io 与节点 api 进行通信。
在移动 android/ios 或 cordova 中,我会让移动界面按上述方式进行通信。
现在我已经解释了我的问题的背景,我将描述我的问题。
现在我有一个节点项目,它使用 bcrypt 来加密注册和登录密码。我还使用通行证来建立会话和快速消息。
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])
})
});
Run Code Online (Sandbox Code Playgroud)
我在这里读到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 });
});
Run Code Online (Sandbox Code Playgroud)
现在,我禁用了会话,为什么我应该继续使用护照?当用户登录时,我使用 bcrypt 来注册和检查密码匹配。如果我删除它,这是否意味着来自 Web 浏览器或移动设备的每个请求也必须传输用户和散列密码?
passport是一个身份验证库,会话是授权的一部分- 过程中的不同步骤。您可以使用passport诸如 a 之类的令牌jsonwebtoken,而不是使用具有不同库的会话ejwt来验证这些令牌,例如,或者创建一个中间件函数来验证需要身份验证的路由上的这些令牌
passport 还可以通过许多已经开发的插件进行扩展,以允许多种形式的身份验证来发布您的授权方法。
你不必使用它,它只是让它更容易一些。bcrypt,另一方面,您可能必须使用。
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |