Skip to content

Commit c8b4559

Browse files
authored
Merge pull request #3 from TemaKozyrev/develop
Develop
2 parents f4c85ca + a64df76 commit c8b4559

5 files changed

Lines changed: 137 additions & 38 deletions

File tree

server/app.js

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ var bodyParser = require('body-parser');
77
var http = require('http');
88
var mongoose = require('mongoose');
99
var session = require('express-session');
10-
var passport = require('passport');
1110
var LocalStrategy = require('passport-local').Strategy;
11+
12+
var User = require('./models/user');
13+
1214
var cors = require('cors');
1315

1416
// var routes = require('./controllers/index');
@@ -21,7 +23,9 @@ app.use(cors());
2123

2224
//connect to mongodb
2325

24-
mongoose.connect('mongodb://test:[email protected]:45329/ambaproject');
26+
27+
mongoose.connect('mongodb://tema:[email protected]:41209/amba');
28+
2529

2630
// uncomment after placing your favicon in /public
2731
//app.use(favicon(__dirname + '/public/favicon.ico'));
@@ -31,32 +35,26 @@ app.use(bodyParser.urlencoded({
3135
extended: true
3236
}));
3337

34-
app.use(session({
35-
secret: 'Secret Session Key',
36-
saveUninitialized: true,
37-
resave: true
38-
}));
38+
app.use(session({ secret: 'session secret key' }));
39+
40+
//passport congif
3941

42+
var passport = require('./config/passport');
4043
app.use(passport.initialize());
4144
app.use(passport.session());
4245

43-
// passport config
44-
var User = require('./models/user');
45-
passport.use(new LocalStrategy(User.authenticate()));
46-
passport.serializeUser(User.serializeUser());
47-
passport.deserializeUser(User.deserializeUser());
48-
4946
app.use(cookieParser());
5047
app.use(express.static(path.join(__dirname, 'public')));
5148

5249
app.use(require('./controllers'));
5350

5451
// catch 404 and forward to error handler
55-
app.use(function(req, res, next) {
56-
var err = new Error('Not Found');
57-
err.status = 404;
58-
next(err);
59-
});
52+
53+
// app.use(function (req, res, next) {
54+
// var err = new Error('Not Found');
55+
// err.status = 404;
56+
// next(err);
57+
// });
6058

6159

6260
/**

server/config/passport.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var passport = require('passport')
2+
, LocalStrategy = require('passport-local').Strategy
3+
, User = require('../models/user');
4+
5+
passport.use(new LocalStrategy(function (username, password, done) {
6+
User.findOne({ username: username }, function (err, user) {
7+
if (err) return done(err);
8+
if (!user) return done(null, false, { message: 'Incorrect username.' });
9+
user.comparePassword(password, function (err, isMatch) {
10+
if (isMatch) {
11+
return done(null, user);
12+
} else {
13+
return done(null, false, { message: 'Incorrect password.' });
14+
}
15+
});
16+
});
17+
}));
18+
19+
passport.serializeUser(function (user, done) {
20+
done(null, user.id);
21+
});
22+
23+
passport.deserializeUser(function (id, done) {
24+
User.findById(id, function (err, user) {
25+
done(err, user);
26+
});
27+
});
28+
29+
module.exports = passport;

server/controllers/user.js

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,43 +5,88 @@ var User = require('../models/user');
55
var verifyToken = require('../middleware/verifyToken');
66
var router = express.Router();
77

8-
router.get('/register', function(req, res) {
9-
res.redirect('/register')
8+
9+
router.get('/register', function (req, res) {
10+
res.redirect('/register');
1011
});
1112

12-
router.post('/register', function(req, res) {
13-
User.register(new User({ username : req.body.username, email: req.body.email }), req.body.password, function(err, user) {
13+
router.post('/register', function (req, res) {
14+
var user = new User({
15+
username: req.body.username,
16+
email: req.body.email,
17+
password: req.body.password11
18+
});
19+
20+
21+
user.save(function (err) {
1422
if (err) {
15-
return res.send(err)
23+
24+
return res.send(err);
1625
} else {
1726
verifyToken.createVerificationToken(user, req)
18-
}
27+
};
28+
1929

2030
passport.authenticate('local')(req, res, function () {
21-
res.send(req.user)
31+
res.send(req.user);
2232
});
23-
});
33+
})
2434
});
2535

26-
router.get('/login', function(req, res) {
27-
res.redirect('/login')
36+
37+
router.get('/login', function (req, res) {
38+
res.send('login');
2839
});
2940

30-
router.post('/login', passport.authenticate('local'), function(req, res) {
31-
res.redirect('/')
41+
router.post('/login', function (req, res, next) {
42+
passport.authenticate('local', function (err, user, info) {
43+
if (!user) {
44+
return res.redirect('/login');
45+
};
46+
req.logIn(user, function (err) {
47+
return res.redirect('/');
48+
});
49+
})(req, res, next);
50+
3251
});
3352

34-
router.get('/logout', function(req, res) {
53+
router.get('/logout', function (req, res) {
3554
req.logout();
3655
res.send('ok');
3756
});
3857

3958
router.get("/verify/:token", function (req, res, next) {
4059
var token = req.params.token;
41-
verifyToken.verifyUser(token, function(err) {
60+
61+
verifyToken.verifyUser(token, function (err) {
62+
4263
if (err) return res.send("verification-failure");
4364
res.send("verification-success");
4465
});
4566
});
4667

68+
router.post('/changepass', function (req, res) {
69+
if (req.isAuthenticated()) {
70+
User.findOne({ username: req.user.username }, function (err, user) {
71+
user.comparePassword(req.body.oldpass, function (err, isMatch) {
72+
if (isMatch) {
73+
user.password = req.body.newpass;
74+
user.save();
75+
res.send("password changed");
76+
} else {
77+
res.send("incorrect old passowrd");
78+
}
79+
})
80+
});
81+
};
82+
});
83+
84+
router.get('/info', function (req, res) {
85+
if (req.isAuthenticated()) {
86+
res.send(req.user.username);
87+
} else {
88+
res.send('not auth');
89+
}
90+
})
91+
4792
module.exports = router;

server/models/user.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
var mongoose = require('mongoose');
22
var uniqueValidator = require('mongoose-unique-validator');
3-
var passportLocalMongoose = require('passport-local-mongoose');
3+
var bcrypt = require('bcrypt-nodejs');
44
var offerSchema = require('./offer').offerSchema;
55
var Schema = mongoose.Schema;
66

7-
8-
97
userSchema = new Schema({ //TODO extend(check) userSchema
108
username: {
119
type: String,
@@ -26,7 +24,13 @@ userSchema = new Schema({ //TODO extend(check) userSchema
2624
default: false
2725
},
2826
password: {
29-
type: String
27+
type: String,
28+
required: true
29+
},
30+
createdAt: {
31+
type: Date,
32+
required: true,
33+
default: Date.now
3034
},
3135
createdAt: {
3236
type: Date,
@@ -35,7 +39,30 @@ userSchema = new Schema({ //TODO extend(check) userSchema
3539
offer: [offerSchema]
3640
});
3741

42+
userSchema.pre('save', function (next) {
43+
var user = this;
44+
var SALT_FACTOR = 5;
45+
46+
if (!user.isModified('password')) return next();
47+
48+
bcrypt.genSalt(SALT_FACTOR, function (err, salt) {
49+
if (err) return next(err);
50+
51+
bcrypt.hash(user.password, salt, null, function (err, hash) {
52+
if (err) return next(err);
53+
user.password = hash;
54+
next();
55+
});
56+
});
57+
});
58+
59+
userSchema.methods.comparePassword = function(candidatePassword, cb) {
60+
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
61+
if (err) return cb(err);
62+
cb(null, isMatch);
63+
});
64+
};
65+
3866
userSchema.plugin(uniqueValidator);
39-
userSchema.plugin(passportLocalMongoose);
4067

4168
module.exports = mongoose.model('User', userSchema);

server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"start": "node app.js"
77
},
88
"dependencies": {
9+
"bcrypt-nodejs": "0.0.3",
910
"body-parser": "~1.12.4",
1011
"cookie-parser": "~1.3.5",
1112
"cors": "^2.8.1",
@@ -20,7 +21,6 @@
2021
"nodemailer": "^3.1.5",
2122
"passport": "^0.3.2",
2223
"passport-local": "^1.0.0",
23-
"passport-local-mongoose": "^4.0.0",
2424
"serve-favicon": "~2.2.1"
2525
}
2626
}

0 commit comments

Comments
 (0)