· 8 years ago · Jan 31, 2018, 09:54 PM
1config
2 --database.js
3 --passport.js
4models
5 --user.js
6routes
7 --users.js
8views
9 --login.js
10app.js
11
12const express = require('express');
13const mysql = require('mysql');
14const path = require('path');
15const logger = require('morgan');
16const cookieParser = require('cookie-parser');
17const bodyParser = require('body-parser');
18const expressValidator = require('express-validator');
19const flash = require('connect-flash');
20const session = require('express-session');
21const passport = require('passport');
22const config = require('./config/database');
23
24// Init MySql
25const db = mysql.createConnection(config);
26
27db.connect((err) => {
28 if(err) throw err;
29 console.log('MySql Connected...');
30});
31
32// Init App
33const app = express();
34
35// View Engine Setup
36app.set('views', path.join(__dirname, 'views'));
37app.set('view engine', 'pug');
38
39// Connect to public directory
40// uncomment after placing your favicon in /public
41// app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
42app.use(logger('dev'));
43app.use(bodyParser.json());
44app.use(bodyParser.urlencoded({ extended: false }));
45app.use(cookieParser());
46app.use(express.static(path.join(__dirname, 'public')));
47
48// Express Session Middleware
49app.use(session({
50 secret: 'secretKey',
51 resave: true,
52 saveUninitialized: true
53}));
54
55// Express Messages Middleware
56app.use(require('connect-flash')());
57app.use((req, res, next) => {
58 res.locals.messages = require('express-messages')(req, res);
59 next();
60});
61
62// Express Validator Middleware
63app.use(expressValidator({
64 errorFormatter: (param, msg, value) => {
65 var namespace = param.split('.'),
66 root = namespace.shift(),
67 formParam = root;
68 while(namespace.length) {
69 formParam += '[' + namepsace.shift() + ']';
70 }
71 return {
72 param: formParam,
73 msg: msg,
74 value: value
75 };
76 }
77}));
78
79// Passport Config
80require('./config/passport')(passport);
81// Passport Middleware
82app.use(passport.initialize());
83app.use(passport.session());
84
85
86// Route Files
87let index = require('./routes/index');
88let users = require('./routes/users');
89let posts = require('./routes/posts');
90
91// Routers
92app.use('/', index);
93app.use('/users', users);
94app.use('/posts', posts);
95
96// catch 404 and forward to error handler
97app.use((req, res, next) => {
98 let err = new Error('Not Found');
99 err.status = 404;
100 next(err);
101});
102
103// error handler
104app.use((err, req, res, next) => {
105 // set locals, only providing error in development
106 res.locals.message = err.message;
107 res.locals.error = req.app.get('env') === 'development' ? err : {};
108
109 // render the error page
110 res.status(err.status || 500);
111 res.render('error');
112});
113
114// Start Server
115app.listen('3000', (req, res, next) => {
116 console.log('Server started on port 3000...');
117});
118
119module.exports = app;
120
121let mysqlModel = require('mysql-model');
122const config = require('../config/database');
123
124let UserModel = mysqlModel.createConnection(config);
125
126// User Model
127let User = UserModel.extend({
128 tableName: 'users'
129});
130
131module.exports = User;
132
133const express = require('express');
134const mysql = require('mysql');
135const router = express.Router();
136const config = require('../config/database');
137const bcrypt = require('bcryptjs');
138const passport = require('passport');
139
140// Init MySql
141const db = mysql.createConnection(config);
142
143// User Model
144let User = require('../models/user');
145
146// Login Form
147router.get('/login', (req, res) => {
148 res.render('login');
149});
150
151// Login Process
152router.post('/login', (req, res, next) => {
153 passport.authenticate('local', {
154 successRedirect: '/',
155 failureRedirect: '/users/login',
156 failureFlash: true
157 })(req, res, next);
158});
159
160module.exports = router;
161
162const LocalStrategy = require('passport-local').Strategy;
163const mysql = require('mysql');
164const bcrypt = require('bcryptjs');
165const config = require('../config/database');
166
167// Init MySql
168const db = mysql.createConnection(config);
169
170// User Model
171const User = require('../models/user');
172
173module.exports = (passport) => {
174 // Local Strategy
175 passport.use(new LocalStrategy((username, password, done) => {
176 // Match Username
177 let query = {username:username};
178 User.findOne(query, (err, user) => {
179 if(err) throw err;
180 if(!user){
181 return done(null, false, {message: 'No user found'});
182 }
183 // Match Password
184 bcrypt.compare(password, user.password, (err, isMatch) => {
185 if(err) throw err;
186 if(isMatch){
187 return done(null, user);
188 } else {
189 return done(null, false, {message: 'Wrong Password'});
190 }
191 });
192 });
193 }));
194 passport.serializeUser(function(user, done) {
195 done(null, user.id);
196 });
197 passport.deserializeUser(function(id, done) {
198 User.findById(id, function(err, user) {
199 done(err, user); done(err, user);
200 });
201 });
202}
203
204extends layout
205
206block content
207 h1 Login
208 hr
209 form(method='POST', action='/users/login')
210 #form-group
211 label Username
212 input.form-control(name='username', type='text')
213 #form-group
214 label Password
215 input.form-control(name='password', type='password')
216 br
217 input.btn.btn-primary(type='submit', value='Submit')