Skip to content

Commit 102e9fb

Browse files
Add user attributes, use email for login, redirect to /restricted on successful login
1 parent 45817c0 commit 102e9fb

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

index.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,30 +40,34 @@ app.use(function(req, res, next){
4040

4141
// dummy database
4242

43-
var users = {
44-
user1: { name: 'user1'},
45-
user2: { name: 'user2'}
46-
};
43+
var users = [
44+
{ firstName: 'Rene', lastName: 'Mueller', email: '[email protected]' },
45+
{ firstName: 'Cecilia', lastName: 'Stark', email: '[email protected]'}
46+
];
4747

4848
// when you create a user, generate a salt
4949
// and hash the password ('foobar' is the pass here)
5050

5151
hash({ password: 'foobar' }, function (err, pass, salt, hash) {
5252
if (err) throw err;
5353
// store the salt & hash in the "db"
54-
users.user1.salt = salt;
55-
users.user1.hash = hash;
56-
users.user2.salt = salt;
57-
users.user2.hash = hash;
54+
users.forEach((element) => {
55+
element.salt = salt;
56+
element.hash = hash;
57+
});
5858
});
5959

60+
function findUserbyEmail(email) {
61+
var u = users.find(u => u.email === email);
62+
return u;
63+
}
6064

6165
// Authenticate using our plain-object database of doom!
6266

63-
function authenticate(name, pass, fn) {
64-
if (!module.parent) console.log('authenticating %s:%s', name, pass);
65-
var user = users[name];
66-
// query the db for the given username
67+
function authenticate(email, pass, fn) {
68+
if (!module.parent) console.log('authenticating %s:%s', email, pass);
69+
var user = findUserbyEmail(email);
70+
// query the db for the given email
6771
if (!user) return fn(null, null)
6872
// apply the same algorithm to the POSTed password, applying
6973
// the hash against the pass / salt, if there is a match we
@@ -106,7 +110,7 @@ app.get('/login', function(req, res){
106110
});
107111

108112
app.post('/login', function (req, res, next) {
109-
authenticate(req.body.username, req.body.password, function(err, user){
113+
authenticate(req.body.email, req.body.password, function(err, user){
110114
if (err) return next(err)
111115
if (user) {
112116
// Regenerate session when signing in
@@ -117,17 +121,17 @@ app.post('/login', function (req, res, next) {
117121
// in the session store to be retrieved,
118122
// or in this case the entire user object
119123
req.session.user = user;
120-
req.session.success = 'Authenticated as ' + user.name
124+
req.session.success = 'Authenticated as ' + user.firstName + '' + user.lastName
121125
+ ' click to <a href="/logout">logout</a>. '
122126
+ ' You may now access <a href="/restricted">/restricted</a>.';
123127
//res.redirect('back');
124-
res.redirect(returnTo || '/');
128+
res.redirect(returnTo || '/restricted');
125129
delete req.session.returnTo;
126130
});
127131
} else {
128132
req.session.error = 'Authentication failed, please check your '
129-
+ ' username and password.'
130-
+ ' (use "user1" or "user" and password "foobar")';
133+
+ ' email and password.'
134+
+ ' (use "[email protected]" or "[email protected]" and password "foobar")';
131135
res.redirect('/login');
132136
}
133137
});

views/login.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
<h1>Login</h1>
55
<%- message %>
6-
Try accessing <a href="/restricted">/restricted</a>, then authenticate with "user1" or "user2" and password "foobar".
6+
Try accessing <a href="/restricted">/restricted</a>, then authenticate with "[email protected]" or "[email protected]" and password "foobar".
77
<form method="post" action="/login">
88
<p>
9-
<label for="username">Username:</label>
10-
<input type="text" name="username" id="username">
9+
<label for="email">Email:</label>
10+
<input type="text" name="email" id="email">
1111
</p>
1212
<p>
1313
<label for="password">Password:</label>

0 commit comments

Comments
 (0)