Tag: validation

令牌不是在nodejs中创build的

我有一个函数,从MySQL数据库中select用户名,并返回结果发布请求如下: function userAuthentication(user){ var deferred = Q.defer(); pool.getConnection(function(err, connection) { if (err) { var dbError = new Error('No db connection'); console.log(dbError); } else { var selectUserName = 'SELECT * FROM User WHERE username= '+connection.escape(user)+' '; connection.query(selectUserName, function(error, rows){ if(error){ console.log(error); deferred.reject(error); } else if(rows.length === 0){ var countError = new Error('No User Found'); console.log ("Database.js […]

Express-validator在asynchronousvalidation中不返回对象

我正在使用express-validator和passport.jsvalidationlogin表单,使用本地策略: login: function() { passport.use('local-login', new LocalStrategy({ passReqToCallback: true }, function(req, username, password, done) { req.check('username', 'Incorrect user and/or password.').doesUserExists(password); req.check('password', 'Password cannot be empty.').notEmpty(); req.asyncValidationErrors(true) .then(function(user) { return done(null, user); }) .catch(function(errors) { if (errors) return done(null, false, req.flash('error', errors)); }); } )); } 函数doesUserExists()是一个自定义的asynchronousvalidation,为用户查询,比较数据库中散列密码提供的密码并parsing: doesUserExists: function(username, password) { return new Promise(function(resolve, reject) { […]

1或JSON模式中的一组属性

我的JSON数据模型有一个对象,其中只有一个或一个属性,以及其他属性都有自己的约束。 有没有办法做到这一点,而不是在这个例子中重复? 下面是一个简单的例子,就像我已经用Node.js + ajv实现这个一样。 var Ajv = require('ajv'), ajv = new Ajv(); var schema = { type: 'object', properties: { id: {type: 'string'}, a: {type: 'integer'}, b: {type: 'integer'} }, required: ['id'], oneOf: [ {required: ['a']}, {required: ['b']} ], additionalProperties: false }; // invalid var json1 = { id: 'someID', a: 1, b: 3 […]

Mongoose:当文件不存在时,在必填字段中设置默认值

我试图设置一个默认值在一个空的字段中保存在MongoDB中的文档 就我而言,这是mongoose模式 var Distribution = new Schema({ temporalCoverage : { startDate : { type: Date, default: Date.now }, endDate : { type: Date, default: Date.now } }, distributionText : String }); 这是要保存的文件: "distribution": { "temporalCoverage": { "endDate": "", "startDate": "" }, "distributionText": "test" } 在这个文档中,空字段是endDate和startDate。 该文档保存在mongoDB中,为空值。 "distribution": { "temporalCoverage": { "endDate": null, "startDate": null }, […]

用于json对象的NodeJSvalidation库

我需要在我的NodeJS应用程序中validation一些对象。 我已经使用了一个很棒的库express-validator ,它完美的工作,但是现在我需要validation不同的对象,不仅仅是请求,而且就expression式validationvalidator ,它使用validationvalidator库,而不是支持stringtypes以外的types。 我发现不同的变体,如Jsonschema , Ajv 他们提供了很好的function,但我需要能够设置错误消息,而不是只是捕获exception或从返回对象parsing它。 像那样 var schema = { "id": "/SimplePerson", "type": "object", "properties": { "name": {"type": "string", "error": "A name should be provided"}, "address": {"$ref": "/SimpleAddress"}, "votes": {"type": "integer", "minimum": 1} } }; 所以我可以为每个属性设置一个错误消息。 有没有现成的解决scheme来实现这个function? 可能的解决scheme 我find了一个伟大的图书馆JSEN它提供了必要的function。

使用Angular.js处理基于OAuth令牌的authentication?

我已经在Node.js中设置了我的后端代码,使用护照成功validationGitHub。 我能够使用jsonwebtoken生成一个标记。 但是,由于OAuth的stream动,我无法pipe理前端。 如果这是基于他们input电子邮件和密码的forms,则视图可能有点像这样: <form ng-submit="login()"> <input ng-model="user.email" type="email" name="email" id="email" ng-required /> <input ng-model="user.password" type="password" name="password" id="password" ng-required /> <button type="submit">Log in</button> </form> 在此stream程中,控制器可以使用login()向路由发出请求,并在成功时接收包含currentUser和令牌的对象,并在callback中redirect。 OAuth的stream程在这里造成了一些麻烦。 在OAuth中,您将用户redirect到站点之外,并返回到服务器上设置currentUser的node.js端的callbackURL。 我不知道如何将angular度前端连接到这个过程。 在angular度,你应该如何处理这个,点击一个“Githublogin”button将更新$window.sessionStorage.tokenvariables和$rootScope.currentUser对象?

是否有可能使用快速静态路由validation?

我在我的项目中使用jwt令牌validation来保护一些重要的数据: if (req.headers.auth) { var token = req.headers.auth.split(' ')[5]; var payload = jwt.decode(token, 'blablabla…'); if (!payload.sub) { res.status(401).send({ message: 'Authentication failed' }); } if (!req.headers.auth) { return res.status(301).send({ message:'You are not authorized' }); } res.send(data); } else { res.header(404).send('Go away!'); } 有没有可能使用这种方法来保护静态路由,使用快速静态中间件添加? UPDATE! 好的,现在在我的静态路由上设置jwt tokenvalidation。 但我有另一个问题 – 如何发送这个令牌到node.js服务器之前,我的angular应用程序上传(现在beacose它被阻止与新的中间件),并开始插入令牌到http头。 我需要一些额外的模块,或maby我的新中间件可以请求以某种方式从浏览器的jwt令牌?

mongoosevalidation – 执行多个自定义validation

我有一个基本的mongoose模式: var userSchema = new Schema({ userName: {type: String, required: 'Please enter a username'}, email: {type: String, required: 'Please enter email'}, password: {type: String, required: 'Please create a password'}, created: {type: Date, default: Date.now} }); 我执行一个自定义的validation器,调用一个小的服务(在另一个文件中)来查找电子邮件地址是否已被使用: userSchema.path('email').validate(function(value, next) { userService.findUser(value, function(err, user) { if (err) { console.log(err); return next(false); } next(!user); }); }, 'Already exists'); […]

错误:在node.js服务器环境中成为用户是不安全的

我用过这个方法 Parse.User.become("session-token-here").then(function (user) { // The current user is now set to user. }, function (error) { // The token could not be validated. }); 这个方法会callbackParsevalidation会话令牌并获取关联的用户,然后在客户端上设置当前用户,就像本网站上的解释http://blog.parse.com/announcements/bring-your-own-login/ 这种方法是完美的工作,但我最近更新npmparsing1.5.0的最新版本,现在我得到了以下错误: Error: It is not secure to become a user on a node.js server environment. at Function.Parse.User.Parse.Object.extend.become (/home/… 有人有这个问题的解决scheme? 提前致谢

Google Play应用内结算购买签名的服务器端validation失败

目前,我正在将Google Play应用内结算与我的androidgame项目相集成,我已经设置了一个Node.js服务器,并计划将Google Play购买响应的“originalJson”和“signature”值发送给服务器端validation。 然后我在我的Node.js服务器上进行了一些testing,首先这里是我购买的一个(从客户端获取)的“originalJson”和“签名”值: originalJson:{"orderId":"GPA.1312-8694-0319-25069","packageName":"com.shihu.sm.testin","productId":"com.shihu.sm.testin.diamond","purchaseTime":1452598011176,"purchaseState":0,"developerPayload":"{\"iabProductId\":\"com.shihu.sm.testin.diamond\",\"gOrderId\":\"2cb77de1a2a94db18b6df84f8037ea5b\",\"serverId\":\"6\",\"productId\":\"202\"}","purchaseToken":"bjoncdcebeclpklebmadidgb.AO-J1OyEbKLL0rhWQAc1hjdWyJPXHkAoHZTfZasqUuFWKWyAlnj-opiDLYILNRpnWgcblO8vV37fWf0kpeNMRZcgRT-fRxAO4P8VQPmU-TJakB-sCiRx8sUxL4nxnUBMnZdFWdpaIZDW5tP3Ck4aO57n1o66PwnjZw"} signature:JdfwMxprv7iMbI5YnVIWXLEAqiDhAQQva2IdfxtmhqBvLNU4Msi8sj31mnrVJfShxNmQI3zhlNUrCCaXdraFM0/y8O4PoZWYr+PFjCmlMovhG+ldeImEu7x52GLoQ7DsO8Yh4aLYmxemezFc1RjcSpq+l6Zzu9T6j3fHjLfQ060SEFapZITI/poxlFyvJX3bHhF9wGP54tL6pGjB/7fBEqTM1zHXUYeZyz+4akqV8oODlIWwMKhvN5tX/Zra9kh9hm0bnJT/1YWso3tLlT/WTK9nsP1l/lTnEXvgzq9QVSGbT/cpD7KSbR5N4i/NmPYAlCOvesW9OlRD05L8yytpBw== 然后我写了下面的代码用“RSA-SHA1”algorithm和“base64”签名编码进行validation: var crypto = require('crypto'); console.log('start verification'); var public_key = "—–BEGIN PUBLIC KEY—–" + "\r\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg+VmzvTvb856ur/J+PWC" + "\r\n" + "gFRhLYV/chAuWzUuqlIh5gnYz1RFOYymCWAKP3wguol8YSe/72zEqAvPutBU2XVj" + "\r\n" + "zx3sHT+GUInbKjgZHzxw0viPh//OfaooEvEFMz9C6J8ABwpGNQUpACmyw12ZKshP" + "\r\n" + "HCJ6PZV+nsWry6PEZgnYCF7w5SDP4GY2tr3Q5D0iQwoALA40KYQfsKZ6pI5L8bDT" + "\r\n" + "2MLTFoemg/npeARy9HYkbonPatBhWjp2flzBRcyQx7DyQ7csLvPl5AGHRT4h5RBq" + "\r\n" + "RlLj+DBgNDAdwvHGyfhbTz7fPsT6xn7qifxAN+2gQsemSVmhi15zECF/k5MtTiOF" + "\r\n" + "owIDAQAB" + "\r\n" + "—–END PUBLIC KEY—–"; verifier= crypto.createVerify("RSA-SHA1"); […]