From 67191d173309327e4dffb3dfb0d618e760ddde18 Mon Sep 17 00:00:00 2001 From: A K M Rezaul Karim Date: Thu, 14 May 2020 20:12:14 +0600 Subject: [PATCH] BE #1 User registration added --- models/user.js | 31 ++++++++++++++++++++++++++ package-lock.json | 55 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +++- routes/users.js | 44 +++++++++++++++++++++++++++++++++++-- 4 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 models/user.js diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..0f9fd61 --- /dev/null +++ b/models/user.js @@ -0,0 +1,31 @@ +const mongoose=require('mongoose'); +const Schema=mongoose.Schema; + +var passportLocalMongoose = require('passport-local-mongoose'); + +var User = new Schema({ + fullname: { + type: String, + default: '' + }, + email: { + type: String, + default: '' + } +}); + +User.plugin(passportLocalMongoose,{ + usernameLowerCase:true, + passwordValidator : (password,cb)=>{ + if (!password.trim()) { + return cb('Password can not be empty!'); + } + else if(password.trim().length<8){ + return cb('Password must be at least 8 chars long'); + } + // return an empty cb() on success + return cb() + } +}); + +module.exports = mongoose.model('User', User); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9b2a196..b0045d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2015,6 +2015,11 @@ "dev": true, "optional": true }, + "generaterr": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/generaterr/-/generaterr-1.5.0.tgz", + "integrity": "sha1-sM62zFFk3yoGEzjMNAqGFTlcUvw=" + }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -3680,6 +3685,46 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-local-mongoose": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-6.0.1.tgz", + "integrity": "sha512-Jc/ImrVnG7o7aTIqrAznt2CxVxy5M2gAxc3erVZyPVUVfiwgvrhlzA9c5fswValA12H2C9mm1AjqGDz+491TDg==", + "requires": { + "generaterr": "^1.5.0", + "passport-local": "^1.0.0", + "scmp": "^2.1.0", + "semver": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + } + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3709,6 +3754,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -4279,6 +4329,11 @@ "xmlchars": "^2.2.0" } }, + "scmp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", + "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", diff --git a/package.json b/package.json index 01a8cde..8163344 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "express": "4.16.1", "mongodb": "^3.5.7", "mongoose": "^5.9.14", - "morgan": "1.9.1" + "morgan": "1.9.1", + "passport": "^0.4.1", + "passport-local-mongoose": "^6.0.1" }, "devDependencies": { "jest": "^26.0.1", diff --git a/routes/users.js b/routes/users.js index 623e430..8c33ba4 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,9 +1,49 @@ var express = require('express'); var router = express.Router(); +var User =require('../models/user'); /* GET users listing. */ -router.get('/', function(req, res, next) { - res.send('respond with a resource'); +router.get('/', (req, res, next) => { + User.find({}) + .then((users)=>{ + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.json(users); + }, (err) => next(err)) + .catch((err) => next(err)); }); +router.post('/signup', (req, res, next) => { + User.register(new User({username: req.body.username}), + req.body.password, (err, user) => { + if(err) { + res.statusCode = 500; + res.setHeader('Content-Type', 'application/json'); + res.json({err: err}); + } + else { + + if (req.body.fullname) + user.fullname = req.body.fullname; + if (req.body.email) + user.email = req.body.email; + + user.save((err, user) => { + if (err) { + res.statusCode = 500; + res.setHeader('Content-Type', 'application/json'); + res.json({err: err}); + return ; + } + else{ + res.statusCode = 200; + res.setHeader('Content-Type', 'application/json'); + res.json({success: true, status: 'Registration Successful!'}); + } + }); + } + }); +}); + + module.exports = router;