Skip to content

Instantly share code, notes, and snippets.

@brianyang
Forked from jfensign/index.js
Created October 18, 2012 10:50
Show Gist options
  • Save brianyang/3910962 to your computer and use it in GitHub Desktop.
Save brianyang/3910962 to your computer and use it in GitHub Desktop.
NodeJS User Registration and Authentication
//index.js
var express = require('express'),
app = module.exports = express.createServer(),
mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/nodeAuth');
//configure app
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view_options', {layout : false});
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use("/assets", express.static(__dirname + '/assets'));
app.use('/models', __dirname + '/models');
});
//include the maps controller
var users = require('./controllers/users_controller.js');
//app.<REQUEST_METHOD>(<REQUEST_URI>, <CONTROLLER_METHOD>)
app.get('/users/create', users.create);
app.post('/users/create', users.create);
app.get('/users/login', users.login);
app.post('/users/login', users.login);
app.listen(3385);
//login.jade
!!! 5
html
head
title Login
body
h1 Login
form(name = "login", action = "/users/login", method = "post")
| Email
input(type="text", name="email", id="email")
br
| Password
input(type="text", name="password", id="password")
br
input(type="submit", value="Login")
//signup.jade
!!! 5
html
head
title Sign Up
body
h1 Sign Up
form(name = "find", action = "/users/create", method = "post")
| Firstname
input(type="text", name="firstname", id="firstname")
br
| Lastname
input(type="text", name="lastname", id="lastname")
br
| Email
input(type="text", name="email", id="email")
br
| Password
input(type="password", name="password", id="password")
br
| Repeat Password
input(type="password", name="repeat_password", id="repeat_password")
br
input(type="submit", value="Search")
//users_controller.js
var crypto = require("crypto");
var user = require("../models/users_model.js");
var UserModel = new user();
exports.create = function(req, res) {
if(req.method.toLowerCase() != "post") {
res.render("signup.jade", {layout: false});
}
else {
new user(req.body).save();
res.send("ok");
}
}
exports.login = function(req, res) {
if(req.method.toLowerCase() != "post") {
res.render("login.jade", {layout: false});
}
else {
user.findOne({email: req.body.email}, function(err, result) {
if(err) console.log(err);
if(result == null) {
res.send('invalid username',
{'Content-type' : 'text/plain'},
403);
}
else {
auth(result);
}
});
function auth( userRes ) {
if(!UserModel.encrypt(req.body.password) == userRes.password) {
res.send('invalid password',
{'Content-type' : 'text/plain'},
403);
} else {
console.log(userRes._id);
user.update({_id : userRes._id}, {'$set' : {token : Date.now}});
res.send(userRes);
}
}
}
}
//user_model.js
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId,
crypto = require('crypto'),
require('assert');
var algorithm = 'aes256';
var key = 'D#$DF#QD#@~!W@E@';
var pw = '';
//USER SCHEMA
var userSchema = new Schema({
ObjectId: ObjectId,
date: {type: Date, default: Date.now},
firstname: {type: String},
lastname: {type: String},
email: {type: String, unique: true},
password: String
});
//encrypt method
userSchema.methods.encrypt = function encrypt(str) {
pw = str;
var cipher = crypto.createCipher(algorithm, key);
var encrypted = cipher.update(pw, 'utf8', 'hex') + cipher.final('hex');
console.log("ENCRYPTED: " + encrypted);
return encrypted;
}
//password setter
userSchema.path('password').set(function(v) {
return this.encrypt(v);
});
module.exports = mongoose.model('User', userSchema);
@tntini
Copy link

tntini commented Jul 8, 2020

/**

  • Module dependencies.
    */
    'user strict';
    var express = require('express');
    var path = require('path');
    var open = require('open');
    var mysql = require('mysql');
    var session = require('express-session');
    var cookieParser = require('cookie-parser')
    var bodyParser = require("body-parser");
    //var app = express();
    var engines = require('consolidate');
    var connect = require('./database');
    var { query } = require('express');
    var nodemailer = require("nodemailer");
    var regForm;

class Server {
constructor(port, app) {
this.port = port;
this.app = app;
this.regForm = regForm;
}
core() {
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
port: 3306,
database: "mydb"
});

	var config = {
		service: "Gmail",
		type: "SMTP",
		host: "smtp.gmail.com",
		secure: true,
		auth: {
			user: '[email protected]',
			pass: 'YourGmailPassword'
		}
	}

	this.app.get('/', (req, res)=>{res.sendFile(path.join(__dirname, '../online/views/index.html'));});

	this.app.listen(this.port,() =>{ open('http://localhost:3001');});
	console.log("App started on port:3001..");
	this.app.set('views', path.join(__dirname, 'views'));
	this.app.set('view engine', 'html');
	this.app.engine('html', engines.mustache);

	this.app.use(session({
		secret: 'secret',
		resave: true,
		saveUninitialized: true
	}));
	this.app.use(express.urlencoded({ extended: true }));
	this.app.use(bodyParser.json());
	this.app.use(express.json());
	this.app.use(express.json());
	this.app.use(express.static('views'));
	
	this.app.get('./index.html', function(req, res) {
	  res.sendFile('./index.html');
	});

	this.app.get('/login.html', function (req, res) {  
		res.sendFile('./login.html' );
	 }) 

	this.app.get('/', (req, res) => {
	  res.render('signup')
	})

	this.app.post('/signup', (req, res) => {
		console.log(req.body)
		var username = req.body.username;
		var name = req.body.name;
		var surname = req.body.surname;
		var idNumber = req.body.idNumber;
		var telephoneNumberWork = req.body.telephoneNumberWork;
		var mobileNumber = req.body.mobileNumber;
		var email = req.body.email;
		var postalAddress1 = req.body.postalAddress1;
		var postalAddress2 = req.body.postalAddress2;
		var postalAddress3 = req.body.postalAddress3;
		var postalCode = req.body.postalCode;
		var password = req.body.password;
		var passwordR = req.body.passwordR;
		var checkBox = req.body.checkbox;
		var isVarified = isVarified;

		var database = "INSERT INTO clients (id, username, name, surname, idNumber, telephoneNumberWork, mobileNumber, email, postalAddress1, postalAddress2, postalAddress3, postalCode, password, passwordR, checkBox) VALUES (NULL, '"+username+"', '"+name+"', '"+surname+"', '"+idNumber+"', '"+telephoneNumberWork+"', '"+mobileNumber+"', '"+email+"', '"+postalAddress1+"', '"+postalAddress2+"', '"+postalAddress3+"', '"+postalCode+"', '"+password+"', '"+passwordR+"', '"+checkBox+"')";
		con.connect(function(err){
			if (err) console.log(err);
			con.query( database, function (err, result){
				if (err) console.log(err);
			});
		});
		console.log('this ran too');
		res.redirect('login.html');
		// res.send(' Submitted Successfully!');
		// res.end();
	})

	this.app.post('/send', function (req, res, next) {
		mailOptions = {
			from: '[email protected]',
			to: '[email protected]',
			subject: req.body.username,
			text: 'Welcome!!!'
		  };
		console.log(mailOptions);
		var transporter = nodemailer.createTransport(config);
		console.log('email-created');

		transporter.sendMail(mailOptions, function(error, response){
			if(error){
				console.log(error);
			res.end("error");
			}else{
				console.log('Email sent to: '+ " " + email);
			res.end("sent");
			}
		});
		console.log('email Testing!!!');
	});

	this.app.get('/signup', (req, res) => {
		res.render('signup');
	})
	this.app.get('/', function(req, res){
		res.render('auth');
	});

	this.app.post('/auth', function(req, res) {
		console.log(req.body);
		var username = req.body.username;
	    var password = req.body.password;
		if (username && password != null) {
			var data = "SELECT * FROM clients WHERE username = '"+username+"' and password = '"+password+"'";
			con.connect(function(err){
				if (err) console.log(err);
				con.query(data, function (err, result){
					if (err) console.log(err);
					if (res) {
						req.session.loggedin = true;
						req.session.username = username;
						req.session.password = password;
						
						console.log(username + " " + password);
						res.redirect('/index_landing.html');
					} else {
						console.log(username + " " + password);
						
					}			
				});
			});
		} else {
			console.log('Please enter Username and Password!');
		}
	});
}

}
module.exports = Server;

Greetings above is my code can you please assist me, I wanna add email verification after register, for now its register and its does log in

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment