Tag: 基本authentication

在passport.js或session中的某处添加用户对象中的额外信息

我想在来自mongodb的用户对象中添加自定义键,这将被passport.js使用,但是我想知道为什么我不能将更多的键添加到该对象中,这里是我的代码。 passport.use(new LocalStrategy( function(username, password, done) { Users.model(false).findOne( {email:username,password:encodePassword(password) }, function(err, user) { if( err ){ // validation failed console.log('Error Occurred'); return done(err); } else if(user != null){ user['customKey'] = "customValue"; // it is not setting console.log(user); return done(null, user); } else { return done(null, false, { message: 'Incorrect username.' }); } }); } )); […]

在redux中处理权限

使用节点 – 还原堆栈。 我们在客户端有动作创build者,后端有reducer + redux状态。 我有以下build议来实现权限: 操作被创build在客户端,这些可能是恶意的,甚至是来自被authentication的用户。 操作被发送到服务器。 该请求是经过身份validation的服务器端和用户权限确定的。 这些动作通过位于节点服务器内部的redux中间件。 中间件根据为操作types指定的权限检查用户权限。 如果用户具有正确的操作权限,那么reducer将创build一个新的redux状态(它也驻留在服务器上)。 问题: 每个动作types都与一组权限相关联,这意味着我们需要非常小心地创build我们的reducer,这样我们就不会允许某个动作超出应有的范围。 有了多个开发团队和一个大型应用程序,我不相信这是足够的。 问题: 有没有一个很好的资源/链接与处理与redux的权限很好的讨论。 是否足够处理复杂的权限? 如果我们检查权限,如上所述是否有任何我没有提到的问题,有没有更好的方法来处理这个问题,同时仍然使用REDX?

用户点击后退button,而会话仍然被authentication,并被redirect到node.js中的login页面

我有一个简单的Web应用程序,它有一个login屏幕和一个活动页面,只有当用户提供有效的凭据时才可以访问。 假设用户点击有效凭证login,并被redirect到活动页面。现在,用户不会点击注销,而只需点击浏览器的后退button并返回到login页面。 这种行为显然是非直观的,我假设用户login时,他/她点击后退button,保持在同一页面,而不是回到login页面。 function loginUser(req, res) { if (req.session.auth) // if user is still authenticated { res.redirect('/activity'); } res.render('login'); } 这是我目前使用的一种简单的方法,总是将用户redirect到活动页面,但是我觉得这是一个资源浪费的方法,因为存在不必要的redirect。 我的问题是,这是执行上述行为的标准和最干净的方式还是有更好的机制? 我正在使用护照进行身份validation并存储jwt令牌。 编辑:重新迭代上面的解决scheme工作只有浏览器没有caching启用,相反,login路由控制器甚至没有被调用,因为浏览器已caching页面。 我正在寻找更强大的东西。 我认为将浏览器硬编码为不在生产环境中caching页面是一种好的做法。

节点JS LDAPauthentication用户

我正在创build一个login身份validation页面,在那里用户将input活动目录的用户名和密码,并使用NodeJS我会检查,看看是否有效,但我不断 [Error: LDAP Error Bad search filter] 要么 [Error: Search returned != 1 results] 当我试图search用户名和密码时,我的代码如下: 我使用的是: https : //github.com/jeremycx/node-LDAP ,假设用户input了hhill的用户名 var ldap = require('LDAP'); var ldapServer = new ldap({ uri: 'ldap://batman.lan', version: 3}); ldapServer.open(function(error) { if(error) { throw new Error('Cant not connect'); } else { console.log('—- connected to ldap —-'); username = '(cn='+username+')'; ldapServer.findandbind({ base: […]

express.basicAuth抛出错误

我刚刚使用express basic auth在nodejs中创build了基本身份validation var express = require('express'); var app = express(); // Authenticator app.use(express.basicAuth('testuser','testpassword')); app.get('/home', function(req, res) { res.send('Hello World'); }); app.listen(process.env.PORT || 8080); 我得到了以下错误。 我不知道我哪里错了。 app.use(express.basicAuth('testuser','testpassword')); ^ TypeError: Object function createApplication() { var app = function(req, res, next) { app.handle(req, res, next); }; mixin(app, proto); mixin(app, EventEmitter.prototype); app.request = { __proto__: req, app: app […]

新用户注册后立即进行Passport身份validation

我正在尝试validation并在/register表单上提交POST后立即login用户。 理想情况下,我希望用户能够注册,然后立即redirect到仪表板,而无需再次input凭据。 我的服务器正在使用Passport 0.1.17,本地策略configuration为使用电子邮件地址和密码login。 目前的代码是: app.post('/register', function(req, res) { // attach POST to new User variable var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name }); // save registerUser Mongo registerUser.save(function(err) { if(err) { console.log(err); } else { console.log('registerUser: ' + registerUser.email + " saved."); } }); // here is where I am […]

刷新令牌Jsonwebtoken

我正在使用NodeJs API应用程序中的jsonwebtoken来validation我的API应用程序中的用户。 我设置的stream程如下: 1)用户通过注册API进行注册,并使用以下命令生成访问令牌: var jwt = require('jsonwebtoken'); var token = jwt.sign(user, _conf.authentication.superSecret, { expiresIn: 1440 // I intend to keep it short. }); 2)例如,令牌在24小时内过期。 该令牌返回给客户端移动应用程序,作为所有后续API请求中的标头使用。 我想知道如何解决与jwt的刷新令牌。 目前我没有刷新令牌的机制。 因此,如果令牌在24小时内过期,我希望客户端(移动应用程序)能够请求新的访问令牌。 提前致谢。

我如何使用node.js来刮取需要validation的网站?

我遇到过很多教程,解释如何使用node.js来刮取不需要authentication/login的公共网站 。 有人可以解释如何刮掉需要使用node.jslogin的网站吗?

REST API和移动应用程序的身份validation策略

我正在用Node.js和Express + MongoDB创build一个REST API服务器。 这个API将有不同的移动客户端(iOS,Android),以及可能以后的Web应用程序。 我需要用户login才能执行一些API请求。 没有第三方应用程序我想连接(没有Facebook,谷歌等)。 我也不想强迫用户访问一个网页或类似的东西,以便他们login。 根据我在许多search中看到的,最好的方法是让用户使用完全凭证login一次,向他们发送令牌作为回报,并使用该令牌validation将来的请求,直到过期为止。 但是,我不知道如何实现这一点。 我很困惑所有的不同的策略。 这是通过基于HTTPS的身份validation完成的,具有OAuth,OAuth 2.0,…? 我只是不知道该用什么 另外,我真的不想在这里重新发明轮子,不是因为我懒,而是主要是因为安全问题。 有没有我可以用来实现这个库? 我听说护照,但我不明白,如果这是可行的或不。 这听起来像是一个通用的东西,我相信有一个简单的解决scheme。 谢谢!

由于连接不再使用parseCookie方法,我们如何使用express来获取会话数据?

在node.js和express中,有很多例子展示了如何获取会话数据。 Node.js和Socket.io Express和Socket.io – 捆绑在一起 Socket.io和Session? 正如您在访问第三个链接时可以看到的那样,它是一个指向StackOverflow的链接。 有一个很好的答案,但正如在@UpTheCreek的评论中指出的,连接不再有parseCookie方法。 我也遇到了这个问题。 我find的所有教程都使用了connect的parseCookie方法,该方法现在不存在。 所以我问他怎么才能得到会话数据,他说他不知道最好的方法,所以我想我会在这里发布这个问题。 当使用express@3.0.0rc4 , socket.io和redis ,我们如何获取会话数据并使用它来授权用户? 我已经能够使用require('connect').utils.parseSignedCookie; ,但是当我这样做的时候,握手的时候总会得到一个警告/错误, warn – handshake error Error 从我读过的东西看来,这听起来不是一个永久的解决scheme。 UPDATE 好的我得到了session.socket.io在我的服务器上工作。 正如我怀疑的那样,我被困在授权的地步。 我想我可能会这样做是错误的,所以请随时纠正我。 在我的Redis数据库中,我将获得用户的信息。 他们第一次login时,我想更新他们的cookie,以便包含他们的用户信息。 然后下次他们回到网站,我想检查他们是否有一个cookie,如果用户信息在那里。 如果不在那里,我想把它们发送到login屏幕。 在login屏幕上,当用户提交信息时,会根据Redis数据库对该信息进行testing,如果匹配,则会使用用户信息更新cookie。 我的问题是这些: 1)如何通过RedisStore更新/更改cookie? 2)看起来会话数据只保存在cookie中。 如果有人closures了cookies,我怎样才能跟踪页面之间的用户信息? 这是我的适用代码: //…hiding unapplicable code… var redis = require('socket.io/node_modules/redis'); var client = redis.createClient(); var RedisStore = require('connect-redis')(express); var redis_store = […]