From e4966fd1f7ca01adb274e59ffce69a2170fab3ee Mon Sep 17 00:00:00 2001 From: Zachary Golba Date: Sat, 10 Sep 2016 17:19:26 -0400 Subject: [PATCH] chore: fix authentication in social-network example (#378) --- .../social-network/app/controllers/users.js | 8 ++---- examples/social-network/app/models/user.js | 26 +++++++++---------- examples/social-network/app/utils/password.js | 11 -------- examples/social-network/package.json | 4 +-- 4 files changed, 16 insertions(+), 33 deletions(-) delete mode 100644 examples/social-network/app/utils/password.js diff --git a/examples/social-network/app/controllers/users.js b/examples/social-network/app/controllers/users.js index e89aa92e..d5c39132 100644 --- a/examples/social-network/app/controllers/users.js +++ b/examples/social-network/app/controllers/users.js @@ -9,7 +9,7 @@ class UsersController extends Controller { 'password' ]; - async login({ + login({ params: { data: { attributes: { @@ -19,11 +19,7 @@ class UsersController extends Controller { } } }) { - const user = await User.findByEmail(email); - - if (user) { - return await user.authenticate(password); - } + return User.authenticate(email, password); } } diff --git a/examples/social-network/app/models/user.js b/examples/social-network/app/models/user.js index 8c5436ef..a464a1f7 100644 --- a/examples/social-network/app/models/user.js +++ b/examples/social-network/app/models/user.js @@ -1,9 +1,5 @@ import { Model } from 'lux-framework'; - -import { - encryptPassword, - comparePassword -} from 'app/utils/password'; +import bcrypt from 'bcrypt-as-promised'; class User extends Model { static hasMany = { @@ -38,13 +34,8 @@ class User extends Model { static hooks = { async beforeSave(user) { - const { id, password, dirtyAttributes } = user; - - if ((typeof id !== 'number') && password || dirtyAttributes.has('password')) { - - Object.assign(user, { - password: encryptPassword(password) - }); + if (user.isNew || user.dirtyAttributes.has('password')) { + user.password = await bcrypt.hash(user.password, 10); } } }; @@ -63,8 +54,15 @@ class User extends Model { } }; - authenticate(password) { - return comparePassword(password, this.password); + static async authenticate(email, password) { + const user = await this.findByEmail(email); + + if (user) { + return await bcrypt + .compare(password, user.password) + .then(() => user) + .catch(bcrypt.MISMATCH_ERROR, () => false); + } } } diff --git a/examples/social-network/app/utils/password.js b/examples/social-network/app/utils/password.js deleted file mode 100644 index 3aeac140..00000000 --- a/examples/social-network/app/utils/password.js +++ /dev/null @@ -1,11 +0,0 @@ -import { hash, compare } from 'bcrypt-as-promised'; - -const saltRounds = 10; - -export function hashPassword(password) { - return hash(password, saltRounds); -} - -export function comparePassword(password, hash) { - return compare(password, hash) -} diff --git a/examples/social-network/package.json b/examples/social-network/package.json index 87d68841..a5a996ef 100644 --- a/examples/social-network/package.json +++ b/examples/social-network/package.json @@ -12,10 +12,10 @@ "dependencies": { "babel-core": "6.14.0", "babel-preset-lux": "1.2.0", + "bcrypt-as-promised": "1.1.0", "knex": "0.11.10", "lux-framework": "1.0.0-rc.7", - "sqlite3": "3.1.4", - "bcrypt-as-promised": "1.1.0" + "sqlite3": "3.1.4" }, "devDependencies": { "faker": "3.1.0"