From 724985a5cbceb38294cf7d62ef0a34b0a3eb12d2 Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 14:54:18 +0700 Subject: [PATCH 1/6] add template and add signup --- .gitignore | 1 + README.md | 33 ++++++- app.js | 48 ++++++++++ bin/www | 90 +++++++++++++++++++ config/config.json | 24 +++++ controllers/usersControllers.js | 105 ++++++++++++++++++++++ migrations/20170425071449-create-user.js | 36 ++++++++ models/index.js | 36 ++++++++ models/user.js | 16 ++++ package.json | 19 ++++ public/stylesheets/style.css | 8 ++ routes/index.js | 9 ++ routes/users.js | 12 +++ seeders/20170425071641-seed-user-dummy.js | 26 ++++++ views/error.jade | 6 ++ views/index.jade | 5 ++ views/layout.jade | 7 ++ 17 files changed, 480 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 app.js create mode 100755 bin/www create mode 100644 config/config.json create mode 100644 controllers/usersControllers.js create mode 100644 migrations/20170425071449-create-user.js create mode 100644 models/index.js create mode 100644 models/user.js create mode 100644 package.json create mode 100644 public/stylesheets/style.css create mode 100644 routes/index.js create mode 100644 routes/users.js create mode 100644 seeders/20170425071641-seed-user-dummy.js create mode 100644 views/error.jade create mode 100644 views/index.jade create mode 100644 views/layout.jade diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/README.md b/README.md index b2e3b8b..1d02b1b 100644 --- a/README.md +++ b/README.md @@ -1 +1,32 @@ -# api-auth \ No newline at end of file +# api-auth + +Author : Haryana wisnu + +Create Date : Selasa, 25 April 2017 + +Description : API Auth dengan CRUD dan Authentication password dengan token + +Acces via localhost:3000/api/users + +Install Step : +- create folder api-auth +- npm init +- express . +- npm install +- npm install --save sequelize sequelize-cli pg jsonwebtoken password-hash +- sequelize init +- sequelize model:craete --name Users --attribute username:string,password:string,role:string,email:string +- sequelize db:migrate +- sequelize seed:craete --name seed-users-dummy +- sequelize db:seed --seed seed-users-dummy + + +| Route | HTTP |Description| +| ------ | ------ |------ | +|/api/signup | POST | sign up with new user info| +|/api/signin | POST | sign in while get an access token based on credentials| +|/api/users | GET | get all the users(admin)| +|/api/users/:id | GET | get a single users(admin and Authenticaticated user)| +|/api/users | POST | create a user (admin only)| +|/api/users/:id | DELETE | delete a user (admin only)| +|/api/users/:id | PUT | update a user with new info (admin and Authenticated user)| diff --git a/app.js b/app.js new file mode 100644 index 0000000..d4ff2a6 --- /dev/null +++ b/app.js @@ -0,0 +1,48 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ + extended: false +})); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', index); +app.use('/api/users', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..fea87fd --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('api-auth:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..9c3527f --- /dev/null +++ b/config/config.json @@ -0,0 +1,24 @@ +{ + "development": { + "username": "wisnu", + "password": "wisnu", + "database": "2w1d12", + "host": "127.0.0.1", + "dialect": "postgres", + "logging":false + }, + "test": { + "username": "root", + "password": null, + "database": "database_test", + "host": "127.0.0.1", + "dialect": "mysql" + }, + "production": { + "username": "root", + "password": null, + "database": "database_production", + "host": "127.0.0.1", + "dialect": "mysql" + } +} diff --git a/controllers/usersControllers.js b/controllers/usersControllers.js new file mode 100644 index 0000000..ca88bbe --- /dev/null +++ b/controllers/usersControllers.js @@ -0,0 +1,105 @@ +var db = require('../models'); +var passwordHash = require('password-hash'); + +module.exports = { + getall: (req, res, next) => { + db.User.findAll().then(ArrResult => { + res.json(ArrResult); + }) + }, + getone: (req, res, next) => { + let id = req.params.id; + db.User.findById(id).then(Result => { + res.json(Result); + }) + }, + create: (req, res, next) => { + let username = req.body.username; + let password = req.body.password; + let role = req.body.role; + let email = req.body.email; + console.log(`username ${username}, password ${password}, role ${role}, email ${email}`); + db.User.create({ + username: username, + password: password, + role: role, + email: email + }).then(Result => { + res.json(Result); + }).catch(err => { + res.send(err); + }) + }, + delete: (req, res, next) => { + let id = req.params.id; + db.User.destroy({ + where: { + id: id + } + }).then(Result => { + res.json(Result); + }).catch(err => { + res.json(err); + }) + }, + update: (req, res, next) => { + let id = req.params.id; + let username = req.body.username; + let password = req.body.password; + let role = req.body.role; + let email = req.body.email; + db.User.update({ + username: username, + password: password, + role: role, + email: email + }, { + where: { + id: id + } + }).then(Result => { + res.json(Result); + }).catch(err => { + res.json(err); + }) + }, + signup: (req, res, next) => { + let username = req.body.username; + var password = passwordHash.generate(req.body.password); + let role = req.body.role; + let email = req.body.email; + console.log(`username ${username}, password ${password}, role ${role}, email ${email}`); + db.User.create({ + username: username, + password: password, + role: role, + email: email + }).then(Result => { + res.json(Result); + }).catch(err => { + res.send(err); + }) + } + signup: (req, res, next) => { + let username = req.body.username; + let password = req.body.password; + console.log(`username ${username}`); + db.User.findOne({ + username: username + }).then(user => { + if (!user) { + res.json({ + success: false, + message: 'Authentication failed. User not found.' + }); + } else if (user) { + if (passwordHash.verify(password, user.password)) {} else { + res.json({ + success: false, + message: 'Authentication failed. Wrong password.' + }); + } + } + }) + } +} diff --git a/migrations/20170425071449-create-user.js b/migrations/20170425071449-create-user.js new file mode 100644 index 0000000..802520e --- /dev/null +++ b/migrations/20170425071449-create-user.js @@ -0,0 +1,36 @@ +'use strict'; +module.exports = { + up: function(queryInterface, Sequelize) { + return queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + username: { + type: Sequelize.STRING + }, + password: { + type: Sequelize.STRING + }, + role: { + type: Sequelize.STRING + }, + email: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + down: function(queryInterface, Sequelize) { + return queryInterface.dropTable('Users'); + } +}; \ No newline at end of file diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..7540dba --- /dev/null +++ b/models/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var Sequelize = require('sequelize'); +var basename = path.basename(module.filename); +var env = process.env.NODE_ENV || 'development'; +var config = require(__dirname + '/../config/config.json')[env]; +var db = {}; + +if (config.use_env_variable) { + var sequelize = new Sequelize(process.env[config.use_env_variable]); +} else { + var sequelize = new Sequelize(config.database, config.username, config.password, config); +} + +fs + .readdirSync(__dirname) + .filter(function(file) { + return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); + }) + .forEach(function(file) { + var model = sequelize['import'](path.join(__dirname, file)); + db[model.name] = model; + }); + +Object.keys(db).forEach(function(modelName) { + if (db[modelName].associate) { + db[modelName].associate(db); + } +}); + +db.sequelize = sequelize; +db.Sequelize = Sequelize; + +module.exports = db; diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..6ef8111 --- /dev/null +++ b/models/user.js @@ -0,0 +1,16 @@ +'use strict'; +module.exports = function(sequelize, DataTypes) { + var User = sequelize.define('User', { + username: DataTypes.STRING, + password: DataTypes.STRING, + role: DataTypes.STRING, + email: DataTypes.STRING + }, { + classMethods: { + associate: function(models) { + // associations can be defined here + } + } + }); + return User; +}; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..d13cda8 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "api-auth", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "nodemon ./bin/www" + }, + "dependencies": { + "body-parser": "~1.17.1", + "cookie-parser": "~1.4.3", + "debug": "~2.6.3", + "express": "~4.15.2", + "jade": "~1.11.0", + "jsonwebtoken": "^7.4.0", + "morgan": "~1.8.1", + "password-hash": "^1.2.2", + "serve-favicon": "~2.4.2" + } +} diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..5e700cf --- /dev/null +++ b/routes/users.js @@ -0,0 +1,12 @@ +var express = require('express'); +var router = express.Router(); +var controllers = require('../controllers/usersControllers'); + +router.get('/', controllers.getall); +router.get('/:id', controllers.getone); +router.post('/', controllers.create); +router.delete('/:id', controllers.delete); +router.put('/:id', controllers.update); +router.post('/signup', controllers.signup); + +module.exports = router; diff --git a/seeders/20170425071641-seed-user-dummy.js b/seeders/20170425071641-seed-user-dummy.js new file mode 100644 index 0000000..e50b180 --- /dev/null +++ b/seeders/20170425071641-seed-user-dummy.js @@ -0,0 +1,26 @@ +'use strict'; + +module.exports = { + up: function(queryInterface, Sequelize) { + /* + Add altering commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.bulkInsert('Person', [{ + name: 'John Doe', + isBetaMember: false + }], {}); + */ + }, + + down: function(queryInterface, Sequelize) { + /* + Add reverting commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.bulkDelete('Person', null, {}); + */ + } +}; diff --git a/views/error.jade b/views/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/views/index.jade b/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/views/layout.jade b/views/layout.jade new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content From 52688fb6d5d09fca6d63061ee7f6b66210890120 Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 15:52:23 +0700 Subject: [PATCH 2/6] add signin --- app.js | 2 +- controllers/indexControllers.js | 5 +++++ controllers/usersControllers.js | 15 +++++++++++---- env | 1 + routes/index.js | 5 +---- routes/users.js | 11 ++++++----- 6 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 controllers/indexControllers.js create mode 100644 env diff --git a/app.js b/app.js index d4ff2a6..3b1ff33 100644 --- a/app.js +++ b/app.js @@ -25,7 +25,7 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); -app.use('/api/users', users); +app.use('/api', users); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/controllers/indexControllers.js b/controllers/indexControllers.js new file mode 100644 index 0000000..36b086d --- /dev/null +++ b/controllers/indexControllers.js @@ -0,0 +1,5 @@ +var db = require('../models'); +var passwordHash = require('password-hash'); +var jwt = require('jsonwebtoken'); + +module.exports = {} diff --git a/controllers/usersControllers.js b/controllers/usersControllers.js index ca88bbe..1b8f32e 100644 --- a/controllers/usersControllers.js +++ b/controllers/usersControllers.js @@ -1,5 +1,6 @@ var db = require('../models'); var passwordHash = require('password-hash'); +var jwt = require('jsonwebtoken'); module.exports = { getall: (req, res, next) => { @@ -79,8 +80,8 @@ module.exports = { }).catch(err => { res.send(err); }) - } - signup: (req, res, next) => { + }, + signin: (req, res, next) => { let username = req.body.username; let password = req.body.password; console.log(`username ${username}`); @@ -93,9 +94,15 @@ module.exports = { message: 'Authentication failed. User not found.' }); } else if (user) { - if (passwordHash.verify(password, user.password)) {} else { + if (passwordHash.verify(password, user.password)) { + var token = jwt.sign(JSON.stringify(user), 'secret'); res.json({ - success: false, + success: true, + message: 'Enjoy your token!', + token: token + }); + } else { + res.send({ message: 'Authentication failed. Wrong password.' }); } diff --git a/env b/env new file mode 100644 index 0000000..4835899 --- /dev/null +++ b/env @@ -0,0 +1 @@ +SECRET_KEY='secret' diff --git a/routes/index.js b/routes/index.js index ecca96a..be38aef 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,9 +1,6 @@ var express = require('express'); var router = express.Router(); +var controllers = require('../controllers/indexControllers'); -/* GET home page. */ -router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); -}); module.exports = router; diff --git a/routes/users.js b/routes/users.js index 5e700cf..2d98323 100644 --- a/routes/users.js +++ b/routes/users.js @@ -2,11 +2,12 @@ var express = require('express'); var router = express.Router(); var controllers = require('../controllers/usersControllers'); -router.get('/', controllers.getall); -router.get('/:id', controllers.getone); -router.post('/', controllers.create); -router.delete('/:id', controllers.delete); -router.put('/:id', controllers.update); +router.get('/users/', controllers.getall); //admin only +router.get('/users/:id', controllers.getone); +router.post('/users/', controllers.create); +router.delete('/users/:id', controllers.delete); +router.put('/users/:id', controllers.update); router.post('/signup', controllers.signup); +router.post('/signin', controllers.signin); module.exports = router; From 5ee3c70a0ffc2fc87e6cf1ecd03db3654f5b12a6 Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 17:00:50 +0700 Subject: [PATCH 3/6] add getall --- .gitignore | 1 + controllers/usersControllers.js | 17 +++++++++-------- env | 2 +- helpers/jwtHelper.js | 26 ++++++++++++++++++++++++++ routes/users.js | 3 ++- 5 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 helpers/jwtHelper.js diff --git a/.gitignore b/.gitignore index 3c3629e..0f06451 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +,env diff --git a/controllers/usersControllers.js b/controllers/usersControllers.js index 1b8f32e..46cac79 100644 --- a/controllers/usersControllers.js +++ b/controllers/usersControllers.js @@ -1,6 +1,6 @@ var db = require('../models'); var passwordHash = require('password-hash'); -var jwt = require('jsonwebtoken'); +var jwthelpers = require('../helpers/jwtHelper'); module.exports = { getall: (req, res, next) => { @@ -16,7 +16,7 @@ module.exports = { }, create: (req, res, next) => { let username = req.body.username; - let password = req.body.password; + let password = passwordHash.generate(req.body.password); let role = req.body.role; let email = req.body.email; console.log(`username ${username}, password ${password}, role ${role}, email ${email}`); @@ -66,7 +66,8 @@ module.exports = { }, signup: (req, res, next) => { let username = req.body.username; - var password = passwordHash.generate(req.body.password); + console.log('Cekkkk ' + req.body.password); + let password = passwordHash.generate(req.body.password); let role = req.body.role; let email = req.body.email; console.log(`username ${username}, password ${password}, role ${role}, email ${email}`); @@ -84,9 +85,10 @@ module.exports = { signin: (req, res, next) => { let username = req.body.username; let password = req.body.password; - console.log(`username ${username}`); db.User.findOne({ - username: username + where: { + username: username + } }).then(user => { if (!user) { res.json({ @@ -95,14 +97,13 @@ module.exports = { }); } else if (user) { if (passwordHash.verify(password, user.password)) { - var token = jwt.sign(JSON.stringify(user), 'secret'); res.json({ success: true, message: 'Enjoy your token!', - token: token + token: jwthelpers.sign(user) }); } else { - res.send({ + res.json({ message: 'Authentication failed. Wrong password.' }); } diff --git a/env b/env index 4835899..8bc2ed3 100644 --- a/env +++ b/env @@ -1 +1 @@ -SECRET_KEY='secret' +SECRET_KEY=secret diff --git a/helpers/jwtHelper.js b/helpers/jwtHelper.js new file mode 100644 index 0000000..2b531f5 --- /dev/null +++ b/helpers/jwtHelper.js @@ -0,0 +1,26 @@ +var jwt = require('jsonwebtoken'); + +module.exports = { + sign: function(value) { + var token = jwt.sign(JSON.stringify(value), 'secret'); + return token; + }, + adminonly: function(req, res, next) { + jwt.verify(req.headers.token, 'secret', + function(err, decoded) { + if (decoded) { + if (decoded.role === 'admin') { + next(); + } else { + res.json({ + message: 'Authentication failed. Your Acces Denied.' + }); + } + } else { + res.json({ + message: err + }); + } + }); + } +} diff --git a/routes/users.js b/routes/users.js index 2d98323..ccf01c0 100644 --- a/routes/users.js +++ b/routes/users.js @@ -1,8 +1,9 @@ var express = require('express'); var router = express.Router(); var controllers = require('../controllers/usersControllers'); +var jwthelpers = require('../helpers/jwtHelper'); -router.get('/users/', controllers.getall); //admin only +router.get('/users/', jwthelpers.adminonly, controllers.getall); //admin only router.get('/users/:id', controllers.getone); router.post('/users/', controllers.create); router.delete('/users/:id', controllers.delete); From fe8a6c8b6e132f8697d0c10cac02c72196ff4c00 Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 17:12:30 +0700 Subject: [PATCH 4/6] add verify adminonly and global --- helpers/jwtHelper.js | 12 ++++++++++++ routes/users.js | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/helpers/jwtHelper.js b/helpers/jwtHelper.js index 2b531f5..da836da 100644 --- a/helpers/jwtHelper.js +++ b/helpers/jwtHelper.js @@ -22,5 +22,17 @@ module.exports = { }); } }); + }, + global: function(req, res, next) { + jwt.verify(req.headers.token, 'secret', + function(err, decoded) { + if (decoded) { + next(); + } else { + res.json({ + message: 'Authentication failed. Your need signup.' + }); + } + }); } } diff --git a/routes/users.js b/routes/users.js index ccf01c0..ec60194 100644 --- a/routes/users.js +++ b/routes/users.js @@ -4,10 +4,10 @@ var controllers = require('../controllers/usersControllers'); var jwthelpers = require('../helpers/jwtHelper'); router.get('/users/', jwthelpers.adminonly, controllers.getall); //admin only -router.get('/users/:id', controllers.getone); -router.post('/users/', controllers.create); -router.delete('/users/:id', controllers.delete); -router.put('/users/:id', controllers.update); +router.get('/users/:id', jwthelpers.global, controllers.getone); +router.post('/users/', jwthelpers.adminonly, controllers.create); +router.delete('/users/:id', jwthelpers.adminonly, controllers.delete); +router.put('/users/:id', jwthelpers.global, controllers.update); router.post('/signup', controllers.signup); router.post('/signin', controllers.signin); From 310fcb0ac8a0fc990e01c71dc35ff65e4ab811cc Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 17:15:59 +0700 Subject: [PATCH 5/6] revisi update and done --- .gitignore | 2 +- README.md | 6 +++--- controllers/usersControllers.js | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 0f06451..6a265cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules -,env +env diff --git a/README.md b/README.md index 1d02b1b..4071ad3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Create Date : Selasa, 25 April 2017 Description : API Auth dengan CRUD dan Authentication password dengan token -Acces via localhost:3000/api/users +Acces via localhost:3000 Install Step : - create folder api-auth @@ -15,9 +15,9 @@ Install Step : - npm install - npm install --save sequelize sequelize-cli pg jsonwebtoken password-hash - sequelize init -- sequelize model:craete --name Users --attribute username:string,password:string,role:string,email:string +- sequelize model:create --name Users --attribute username:string,password:string,role:string,email:string - sequelize db:migrate -- sequelize seed:craete --name seed-users-dummy +- sequelize seed:create --name seed-users-dummy - sequelize db:seed --seed seed-users-dummy diff --git a/controllers/usersControllers.js b/controllers/usersControllers.js index 46cac79..c5d158b 100644 --- a/controllers/usersControllers.js +++ b/controllers/usersControllers.js @@ -46,7 +46,7 @@ module.exports = { update: (req, res, next) => { let id = req.params.id; let username = req.body.username; - let password = req.body.password; + let password = passwordHash.generate(req.body.password); let role = req.body.role; let email = req.body.email; db.User.update({ @@ -66,7 +66,6 @@ module.exports = { }, signup: (req, res, next) => { let username = req.body.username; - console.log('Cekkkk ' + req.body.password); let password = passwordHash.generate(req.body.password); let role = req.body.role; let email = req.body.email; From 4a82a2da52bb04ee59a88ec5964b3e01130fa5ba Mon Sep 17 00:00:00 2001 From: haryanawisnu Date: Tue, 25 Apr 2017 17:23:06 +0700 Subject: [PATCH 6/6] revisi done --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 4071ad3..1af806d 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,9 @@ Description : API Auth dengan CRUD dan Authentication password dengan token Acces via localhost:3000 Install Step : -- create folder api-auth -- npm init -- express . - npm install -- npm install --save sequelize sequelize-cli pg jsonwebtoken password-hash - sequelize init -- sequelize model:create --name Users --attribute username:string,password:string,role:string,email:string - sequelize db:migrate -- sequelize seed:create --name seed-users-dummy - sequelize db:seed --seed seed-users-dummy