From 3454a9fa57a1eee19776de9dbbcec86587e5ab5a Mon Sep 17 00:00:00 2001 From: noemi alonso Date: Tue, 22 Oct 2019 22:05:57 +0200 Subject: [PATCH 1/2] fallo en post login Cannot set property 'currentUser' of undefined at User.findOne.then.user (/Users/noemialonso/Desktop/W5/22/lab-express-basic-auth/routes/index.js:90:33), no esta nada en carpetas --- app.js | 16 ++ models/User.js | 13 ++ package-lock.json | 284 ++++++++++++++--------------------- package.json | 5 +- public/stylesheets/style.css | 44 ++++++ routes/index.js | 95 ++++++++++++ views/login.hbs | 20 +++ views/signup.hbs | 17 +++ 8 files changed, 320 insertions(+), 174 deletions(-) create mode 100644 models/User.js create mode 100644 views/login.hbs create mode 100644 views/signup.hbs diff --git a/app.js b/app.js index 4c4fe56e37..c9a24e7580 100644 --- a/app.js +++ b/app.js @@ -4,6 +4,9 @@ const path = require('path'); const cookieParser = require('cookie-parser'); const logger = require('morgan'); const mongoose = require('mongoose'); +const session = require("express-session"); +const MongoStore = require("connect-mongo")(session); + const indexRouter = require('./routes/index'); @@ -26,6 +29,19 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); +// secret: Used to sign the session ID cookie (required) +// cookie: Object for the session ID cookie. In this case, we only set the maxAge attribute, which configures the expiration date of the cookie (in milliseconds). +// store: Sets the session store instance. In this case, we create a new instance of connect-mongo, so we can store the session information in our Mongo database. + +app.use(session({ + secret: "basic-auth-secret", + cookie: { maxAge: 60000 }, + store: new MongoStore({ + mongooseConnection: mongoose.connection, + ttl: 24 * 60 * 60 // 1 day + }) +})); + // -- 404 and error handler // NOTE: requires a views/not-found.ejs template diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000000..7ccd670431 --- /dev/null +++ b/models/User.js @@ -0,0 +1,13 @@ +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; + +const userSchema = new Schema({ + username: {type:String, required:true}, + password: {type:String, required:true} +}, { + timestamps: true +}); + +const User = mongoose.model("User", userSchema); + +module.exports = User; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0eb3ea0d51..3a26fac108 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,22 +18,6 @@ "negotiator": "0.6.1" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -104,11 +88,6 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -187,6 +166,11 @@ "safe-buffer": "5.1.2" } }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "binary-extensions": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", @@ -297,27 +281,11 @@ "unset-value": "^1.0.0" } }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "optional": true - }, "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -378,25 +346,6 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "optional": true - } - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -419,6 +368,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -442,6 +397,14 @@ "xdg-basedir": "^3.0.0" } }, + "connect-mongo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.0.0.tgz", + "integrity": "sha512-Y95urWNGrAoKY2w31s7Q9Gs/W3qdMCshUIeDTgulssHi6KueYtz4XrbV3kcnQaR8EcBQvooNNX7aOaAJDgudag==", + "requires": { + "mongodb": "^3.1.0" + } + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -512,12 +475,6 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "optional": true - }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -701,6 +658,48 @@ "vary": "~1.1.2" } }, + "express-session": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz", + "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1389,14 +1388,14 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "handlebars": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", - "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.5.tgz", + "integrity": "sha512-I16T/l8X9DV3sEkY9sK9lsPRgDsj82ayBY/4pAZyP2BcX5WeRM3O06bw9kIs2GLrHvFB/DNzWWJyFvof8wQGqw==", "requires": { - "async": "^1.4.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" } }, "has-flag": { @@ -1434,12 +1433,12 @@ } }, "hbs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.1.tgz", - "integrity": "sha1-S/2YZQ3IydrESzyprfnAmOi8M7Y=", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.6.tgz", + "integrity": "sha512-KFt3Y4zOvVQOp84TmqVaFTpBTYO1sVenBoBY712MI3vPkKxVoO6AsuEyDayIRPRAHRYZHHWnmc4spFa8fhQpLw==", "requires": { - "handlebars": "4.0.5", - "walk": "2.3.9" + "handlebars": "4.3.5", + "walk": "2.3.14" } }, "http-errors": { @@ -1667,22 +1666,9 @@ "package-json": "^4.0.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "optional": true - }, "lodash": { "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "optional": true + "resolved": "" }, "lowercase-keys": { "version": "1.0.1", @@ -1799,9 +1785,9 @@ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -1956,6 +1942,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, "nodemon": { "version": "1.18.10", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz", @@ -2162,6 +2153,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -2290,15 +2286,6 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2371,9 +2358,9 @@ } }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -2517,12 +2504,9 @@ } }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { "version": "0.5.2", @@ -2684,29 +2668,22 @@ } }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.3.tgz", + "integrity": "sha512-KfQUgOqTkLp2aZxrMbCuKCDGW9slFYu2A23A36Gs7sGzTLcRBDORdOi5E21KWHFIfkY8kzgi/Pr1cXCh0yIp5g==", "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - } + "commander": "~2.20.3", + "source-map": "~0.6.1" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } }, "undefsafe": { "version": "2.0.2", @@ -2717,35 +2694,14 @@ } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-string": { @@ -2858,9 +2814,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "walk": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", - "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", "requires": { "foreachasync": "^3.0.0" } @@ -2881,12 +2837,6 @@ "string-width": "^2.1.1" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "optional": true - }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -2911,18 +2861,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } } } } diff --git a/package.json b/package.json index 2109314f81..d2c4eda3fa 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,13 @@ "start-dev": "nodemon ./bin/www" }, "dependencies": { + "bcryptjs": "^2.4.3", + "connect-mongo": "^3.0.0", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.16.0", - "hbs": "~4.0.1", + "express-session": "^1.17.0", + "hbs": "^4.0.6", "http-errors": "~1.6.2", "mongoose": "^5.4.12", "morgan": "~1.9.0", diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 9453385b99..880b6ec0c9 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -6,3 +6,47 @@ body { a { color: #00B7FF; } + +#form { + margin: 30px auto; + width: 380px; +} + +#form label { + color: #666; + display: inline-block; + margin-bottom: 10px; + text-align: center; + width: 100%; +} + +#form input, +#form button { + box-sizing: border-box; + font-size: 14px; + outline: 0; + padding: 4px; + width: 100%; + margin-bottom: 20px; +} + +#form button { + background: #43a3e6; + border: 1px solid #43a3e6; + border-radius: 4px; + color: #fff; + cursor: pointer; + display: inline-block; + font-size: 14px; + padding: 8px 16px; + text-decoration: none; + text-transform: uppercase; + transition: .3s ease background; + width: 100%; +} + +#form button:hover { + background: #fff; + color: #43a3e6; + transition: .3s ease background; +} \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index f2d4e52ad3..94132ab8c3 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,9 +1,104 @@ const express = require('express'); const router = express.Router(); +const bcrypt = require("bcryptjs"); +const bcryptSalt = 10; + +const User = require("../models/User"); + + /* GET home page. */ router.get('/', (req, res, next) => { res.render('index', { title: 'Express' }); }); +router.get("/signup", (req, res, next) => { + res.render("signup"); +}); + +router.post("/signup", (req, res, next) => { + const { username, password } = req.body; + const salt = bcrypt.genSaltSync(bcryptSalt); + const hashPass = bcrypt.hashSync(password, salt); + + // validamos si los valores de los inputs llegan vacĂ­os + + if (username === "" || password === "") { + res.render("signup", { + errorMessage: "Indicate a username and a password to sign up" + }); + return; + } + + //busco en la BD si existe el username + + User.findOne({ username: username }) + .then(user => { + if (user !== null) { + res.render("signup", { + errorMessage: "The username already exists!" + }); + return; + } + + const salt = bcrypt.genSaltSync(bcryptSalt); + const hashPass = bcrypt.hashSync(password, salt); + + User.create({ + username, + password: hashPass + }) + .then(() => { + res.redirect("/"); + }) + .catch(error => { + console.log(error); + }); + }) + .catch(error => { + next(error); + }); +}); + + +router.get("/login", (req, res, next) => { + res.render("login"); +}); + + +router.post("/login", (req, res, next) => { + const theUsername = req.body.username; + const thePassword = req.body.password; + + if (theUsername === "" || thePassword === "") { + res.render("login", { + errorMessage: "Please enter both, username and password to sign up." + }); + return; + } + + User.findOne({ "username": theUsername }) + .then(user => { + if (!user) { + res.render("login", { + errorMessage: "The username doesn't exist." + }); + return; + } + if (bcrypt.compareSync(thePassword, user.password)) { + // Save the login in the session! + req.session.currentUser = user; + res.redirect("/"); + } else { + res.render("login", { + errorMessage: "Incorrect password" + }); + } + }) + .catch(error => { + next(error); + }) +}); + + module.exports = router; diff --git a/views/login.hbs b/views/login.hbs new file mode 100644 index 0000000000..254f13ae46 --- /dev/null +++ b/views/login.hbs @@ -0,0 +1,20 @@ +
+

Login

+ + + + + + + + {{#if errorMessage }} +
{{ errorMessage }}
+ {{/if}} + + + + + +
\ No newline at end of file diff --git a/views/signup.hbs b/views/signup.hbs new file mode 100644 index 0000000000..37179b6bf5 --- /dev/null +++ b/views/signup.hbs @@ -0,0 +1,17 @@ +
+ +
+ + + + +
+ + + + +
+ +{{#if errorMessage}} +
{{ errorMessage }}
+{{/if}} \ No newline at end of file From 50d423cd60913aeb0ab21b9539a598f3106cc2f1 Mon Sep 17 00:00:00 2001 From: noemi alonso Date: Wed, 23 Oct 2019 12:48:05 +0200 Subject: [PATCH 2/2] ejercicio acabado --- app.js | 29 ++++++++++++++++++----------- public/images/funnycat.jpg | Bin 0 -> 87089 bytes routes/index.js | 7 ++++++- routes/site-routes.js | 28 ++++++++++++++++++++++++++++ views/main.hbs | 2 ++ views/secret.hbs | 5 +++++ 6 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 public/images/funnycat.jpg create mode 100644 routes/site-routes.js create mode 100644 views/main.hbs create mode 100644 views/secret.hbs diff --git a/app.js b/app.js index c9a24e7580..df9f8d9c61 100644 --- a/app.js +++ b/app.js @@ -17,6 +17,21 @@ mongoose.connect('mongodb://localhost/basic-auth', { useNewUrlParser: true, reconnectTries: Number.MAX_VALUE }); +//justo despues de conexion con mongoose poner el middleware de session sino no funciona +// secret: Used to sign the session ID cookie (required) +// cookie: Object for the session ID cookie. In this case, we only set the maxAge attribute, which configures the expiration date of the cookie (in milliseconds). +// store: Sets the session store instance. In this case, we create a new instance of connect-mongo, so we can store the session information in our Mongo database. + +app.use(session({ + secret: "basic-auth-secret", + cookie: { maxAge: 60000 }, + store: new MongoStore({ + mongooseConnection: mongoose.connection, + ttl: 24 * 60 * 60 // 1 day + }) +})); + + // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); @@ -29,18 +44,10 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); -// secret: Used to sign the session ID cookie (required) -// cookie: Object for the session ID cookie. In this case, we only set the maxAge attribute, which configures the expiration date of the cookie (in milliseconds). -// store: Sets the session store instance. In this case, we create a new instance of connect-mongo, so we can store the session information in our Mongo database. +const usersRouter = require("./routes/site-routes") +app.use('/user', usersRouter); + -app.use(session({ - secret: "basic-auth-secret", - cookie: { maxAge: 60000 }, - store: new MongoStore({ - mongooseConnection: mongoose.connection, - ttl: 24 * 60 * 60 // 1 day - }) -})); // -- 404 and error handler diff --git a/public/images/funnycat.jpg b/public/images/funnycat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7757bec43cfcb9e29f085235d34f05d321798053 GIT binary patch literal 87089 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 literal 0 HcmV?d00001 diff --git a/routes/index.js b/routes/index.js index 94132ab8c3..ba2783ab0c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -12,6 +12,11 @@ router.get('/', (req, res, next) => { res.render('index', { title: 'Express' }); }); +router.get('/main', (req,res,next)=>{ + res.render("main") +}); + + router.get("/signup", (req, res, next) => { res.render("signup"); }); @@ -88,7 +93,7 @@ router.post("/login", (req, res, next) => { if (bcrypt.compareSync(thePassword, user.password)) { // Save the login in the session! req.session.currentUser = user; - res.redirect("/"); + res.redirect("/user/private"); } else { res.render("login", { errorMessage: "Incorrect password" diff --git a/routes/site-routes.js b/routes/site-routes.js new file mode 100644 index 0000000000..99d0fe68e5 --- /dev/null +++ b/routes/site-routes.js @@ -0,0 +1,28 @@ +const express = require("express"); +const router = express.Router(); + +//renderiz ala plantilla home.hbs +router.get("/", (req, res, next) => { + res.render("home"); +}); + + +// verificamiso si el usuario tiene una session activa, de ser asi, lo redirigimos a la siguiente ruta +// en este caso, /secret, en caso contrario redirigimos al usuario a /login +router.use((req, res, next) => { + if (req.session.currentUser) { // <== if there's user in the session (user is logged in) + next(); // ==> go to the next route + } else { + res.redirect("/login"); + } +}); + +// renderizamos la plantilla secret.hbs con el username , deconstruimos en la variable username el username de request +// session de currentUser + +router.get("/private", (req, res, next) => { + const {username} = req.session.currentUser + res.render("secret", {username}); +}); + +module.exports = router; \ No newline at end of file diff --git a/views/main.hbs b/views/main.hbs new file mode 100644 index 0000000000..80baed7eaa --- /dev/null +++ b/views/main.hbs @@ -0,0 +1,2 @@ +

FUNNY CAT

+ \ No newline at end of file diff --git a/views/secret.hbs b/views/secret.hbs new file mode 100644 index 0000000000..21d9466b9e --- /dev/null +++ b/views/secret.hbs @@ -0,0 +1,5 @@ +
+

You are in a session! {{username}}

+
+

+Logout \ No newline at end of file