Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
42 views9 pages

Node Express

The document outlines the implementation of a user authentication system using Express, Passport.js, and MongoDB. It includes routes for user registration, login, and Google authentication, along with session management. The code demonstrates both local and Google OAuth strategies for user authentication, with a focus on handling user data securely.

Uploaded by

Dhun
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views9 pages

Node Express

The document outlines the implementation of a user authentication system using Express, Passport.js, and MongoDB. It includes routes for user registration, login, and Google authentication, along with session management. The code demonstrates both local and Google OAuth strategies for user authentication, with a focus on handling user data securely.

Uploaded by

Dhun
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

Code

const express = require('express');


const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bodyParser = require('body-parser');

const app = express();

// Middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'your-secret-key', // Change this to a secure secret
resave: false,
saveUninitialized: false,
}));

app.use(passport.initialize());
app.use(passport.session());

// User model (example)


const users = []; // In-memory user storage for simplicity
// Configure Passport.js
passport.use(new LocalStrategy(
(username, password, done) => {
const user = users.find(u => u.username === username);
if (!user) return done(null, false, { message: 'Incorrect username.' });
if (user.password !== password) return done(null, false, { message: 'Incorrect password.' });
return done(null, user);
}
));

passport.serializeUser((user, done) => {


done(null, user.username);
});

passport.deserializeUser((username, done) => {


const user = users.find(u => u.username === username);
done(null, user);
});

// Routes
app.get('/', (req, res) => {
res.send('<h1>Welcome</h1><a href="/login">Login</a> | <a href="/register">Register</a>');
});

// Registration Route
app.get('/register', (req, res) => {
res.send(`
<form method="POST" action="/register">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Register</button>
</form>
`);
});

app.post('/register', (req, res) => {


const { username, password } = req.body;
if (users.find(u => u.username === username)) {
return res.send('User already exists.');
}
users.push({ username, password });
res.redirect('/login');
});

// Login Route
app.get('/login', (req, res) => {
res.send(`
<form method="POST" action="/login">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
`);
});

app.post('/login', passport.authenticate('local', {
successRedirect: '/protected',
failureRedirect: '/login',
}));

// Protected Route
app.get('/protected', (req, res) => {
if (req.isAuthenticated()) {
res.send(`<h1>Hello ${req.user.username}!</h1><a href="/logout">Logout</a>`);
} else {
res.redirect('/login');
}
});

// Logout Route
app.get('/logout', (req, res) => {
req.logout((err) => {
if (err) return next(err);
res.redirect('/');
});
});

// Start the server


app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
Using mongoose

const express = require('express');


const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const app = express();


// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/passport-demo', {
useNewUrlParser: true,
useUnifiedTopology: true,
});

const UserSchema = new mongoose.Schema({


username: { type: String, required: true, unique: true },
password: { type: String, required: true },
});

const User = mongoose.model('User', UserSchema);

// Middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'your-secret-key', // Change to a secure secret
resave: false,
saveUninitialized: false,
}));
app.use(passport.initialize());
app.use(passport.session());

// Passport Configuration
passport.use(new LocalStrategy(
(username, password, done) => {
User.findOne({ username }, (err, user) => {
if (err) return done(err);
if (!user) return done(null, false, { message: 'Incorrect username.' });
if (user.password !== password) return done(null, false, { message: 'Incorrect password.' });
return done(null, user);
});
}
));

passport.serializeUser((user, done) => {


done(null, user.id);
});

passport.deserializeUser((id, done) => {


User.findById(id, (err, user) => {
done(err, user);
});
});

// Routes
app.get('/', (req, res) => {
res.send('<h1>Welcome</h1><a href="/login">Login</a> | <a href="/register">Register</a>');
});

// Registration Route
app.get('/register', (req, res) => {
res.send(`
<form method="POST" action="/register">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Register</button>
</form>
`);
});

app.post('/register', (req, res) => {


const { username, password } = req.body;
const newUser = new User({ username, password });
newUser.save(err => {
if (err) {
return res.send('User already exists or an error occurred.');
}
res.redirect('/login');
});
});

// Login Route
app.get('/login', (req, res) => {
res.send(`
<form method="POST" action="/login">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
`);
});

app.post('/login', passport.authenticate('local', {
successRedirect: '/protected',
failureRedirect: '/login',
}));

// Protected Route
app.get('/protected', (req, res) => {
if (req.isAuthenticated()) {
res.send(`Hello ${req.user.username}! <a href="/logout">Logout</a>`);
} else {
res.redirect('/login');
}
});

// Logout Route
app.get('/logout', (req, res) => {
req.logout((err) => {
if (err) return next(err);
res.redirect('/');
});
});

// Start the server


app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});

Google authentication

npm install express express-session passport passport-google-oauth20 mongoose body-parser

const express = require('express');


const session = require('express-session');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const app = express();

// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/passport-demo', {
useNewUrlParser: true,
useUnifiedTopology: true,
});

const UserSchema = new mongoose.Schema({


googleId: { type: String, required: true, unique: true },
username: String,
thumbnail: String,
});

const User = mongoose.model('User', UserSchema);

// Middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'your-secret-key', // Change to a secure secret
resave: false,
saveUninitialized: false,
}));
app.use(passport.initialize());
app.use(passport.session());

// Passport Configuration
passport.use(new GoogleStrategy({
clientID: 'YOUR_GOOGLE_CLIENT_ID', // Replace with your client ID
clientSecret: 'YOUR_GOOGLE_CLIENT_SECRET', // Replace with your client secret
callbackURL: '/auth/google/callback',
},
async (accessToken, refreshToken, profile, done) => {
try {
const existingUser = await User.findOne({ googleId: profile.id });
if (existingUser) {
return done(null, existingUser);
}
const newUser = await new User({
googleId: profile.id,
username: profile.displayName,
thumbnail: profile._json.picture,
}).save();
done(null, newUser);
} catch (err) {
done(err, null);
}
}));

passport.serializeUser((user, done) => {


done(null, user.id);
});

passport.deserializeUser((id, done) => {


User.findById(id, (err, user) => {
done(err, user);
});
});

// Routes
app.get('/', (req, res) => {
res.send('<h1>Welcome</h1><a href="/auth/google">Login with Google</a>');
});

app.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email'],
}));

app.get('/auth/google/callback',
passport.authenticate('google', {
failureRedirect: '/login',
successRedirect: '/protected',
}));

app.get('/protected', (req, res) => {


if (req.isAuthenticated()) {
res.send(`Hello ${req.user.username}! <img src="${req.user.thumbnail}" /><a
href="/logout">Logout</a>`);
} else {
res.redirect('/');
}
});

app.get('/logout', (req, res) => {


req.logout((err) => {
if (err) return next(err);
res.redirect('/');
});
});

// Start the server


app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});

You might also like