Um formulário de login e registro é um formulário da web que permite aos usuários fazer login em sua conta existente ou criar uma nova conta. O formulário de login normalmente inclui campos para o nome de usuário ou endereço de e-mail e senha do usuário. O formulário de registro normalmente inclui campos para nome do usuário, endereço de e-mail, senha e outras informações opcionais, como endereço ou número de telefone.
Os formulários de login e registro são uma parte essencial de muitos sites e aplicativos da web. Eles permitem que os usuários acessem suas contas e usem os recursos e serviços que estão disponíveis para eles.
Este tutorial ensinará como criar um aplicativo de registro de usuário e autenticação de login usando banco de dados Node.js, Express e MongoDB. Você aprenderá como criar um modelo de usuário, armazenar dados do usuário no MongoDB e implementar o registro do usuário e a autenticação de login.
Para criar uma aplicação que autentique o registro e login do usuário usando bancos de dados Node.js, Express e MongoDB, siga estas etapas:
Execute o seguinte comando no terminal para criar um novo diretório para login do nó js e sistema de registro com mongodb:
express --view=ejs myApp
Em seguida, execute o seguinte comando para entrar nos diretórios do aplicativo myApp . Abra seu cmd e execute o seguinte comando:
cd myApp
A estrutura do seu aplicativo node express js se parece com:
Instale algum módulo de nó necessário; então abra novamente seu cmd e execute os seguintes comandos:
npm install
npm install express-flash --save
npm install express-session --save
npm install mongoose
npm install passport passport-local --save
npm install passport-local-mongoose --save
npm install body-parser --save
Crie um novo nome de arquivo database.js; então visite o diretório raiz do seu aplicativo e crie um novo nome de arquivo database.js. Em seguida, adicione o seguinte código para conectar o aplicativo node js express ao banco de dados mongoDB:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/node-mongodb', {useNewUrlParser: true});
var conn = mongoose.connection;
conn.on('connected', function() {
console.log('database is connected successfully');
});
conn.on('disconnected',function(){
console.log('database is disconnected successfully');
})
conn.on('error', console.error.bind(console, 'connection error:'));
module.exports = conn;
Criar modelo; então visite o diretório do seu aplicativo e crie o nome do diretório Models. E dentro deste diretório; crie um arquivo userModel.js e adicione os seguintes códigos nele:
Antes da versão 5, o Mongoose tinha uma exportação padrão separada para o Schema e era necessária da seguinte maneira:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
name: String,
email: String,
password: String
});
var User = mongoose.model('User', userSchema);
Entretanto, com a versão 5 e superior, o construtor Schema agora é exportado diretamente e você deve solicitá-lo da seguinte maneira:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
name: String,
email: String,
password: String
});
var User = mongoose.model('User', userSchema);
Importar módulos e criar rotas de login e cadastro no arquivo app.js ; Portanto, visite o diretório raiz do seu aplicativo e abra o arquivo app.js em qualquer editor de texto; em seguida, adicione o seguinte código nele:
var express = require("express");
var mongoose = require("mongoose");
var passport = require("passport");
var bodyParser = require("body-parser");
var LocalStrategy = require("passport-local");
var passportLocalMongoose = require("passport-local-mongoose");
var User = require("./models/userModel");
var app = express();
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(require("express-session")({
secret: "node js mongodb",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//=====================
// ROUTES
//=====================
// Showing home page
app.get("/", function (req, res) {
res.render('register', {
title: 'Registration Page',
name: '',
email: '',
password: ''
})
});
// Showing secret page
app.get("/home", isLoggedIn, function (req, res) {
res.render("home");
});
// Showing register form
app.get("/register", function (req, res) {
res.render('register', {
title: 'Registration Page',
name: '',
email: '',
password: ''
})
});
// Handling user signup
app.post("/register", function (req, res) {
var email = req.body.email
var password = req.body.password
User.register(new User({ email: email }),
password, function (err, user) {
if (err) {
console.log(err);
return res.render("register");
}
passport.authenticate("local")(
req, res, function () {
req.flash('success', 'You have logged in')
res.render("home");
});
});
});
//Showing login form
app.get("/login", function (req, res) {
res.render('login', {
title: 'Login',
email: '',
password: ''
})
});
//Handling user login
app.post("/login", passport.authenticate("local", {
successRedirect: "/home",
failureRedirect: "/login"
}), function (req, res) {
});
//Handling user logout
app.get("/logout", function (req, res) {
req.logout();
res.redirect("/");
});
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect("/login");
}
var port = process.env.PORT || 3000;
app.listen(port, function () {
console.log("Server Has Started!");
});
Criar visualizações de login e cadastro; então visite o diretório de visualizações e crie o seguinte arquivo de visualizações nele:
Agora, abra seu arquivo login.ejs e atualize o seguinte código em seu arquivo:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
<% if (messages.error) { %>
<p style="color:red"><%- messages.error %></p>
<% } %>
<% if (messages.success) { %>
<p style="color:green"><%- messages.success %></p>
<% } %>
<form action="/login" method="post" name="form1">
<div class="form-group">
<label for="exampleInputEmail1">Email</label>
<input type="email" name="email" class="form-control" id="email" aria-describedby="emailHelp" placeholder="Enter email" value="">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Password</label>
<input type="password" name="password" class="form-control" id="password" aria-describedby="emailHelp" placeholder="*********" value="">
</div>
<input type="submit" class="btn btn-primary" value="Add">
<a href="auth/register" class="btn btn-success ml-2">Register Here</a>
</form>
</body>
</html>
Agora, abra seu arquivo Register.ejs e atualize o seguinte código em seu arquivo:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
<% if (messages.error) { %>
<p style="color:red"><%- messages.error %></p>
<% } %>
<% if (messages.success) { %>
<p style="color:green"><%- messages.success %></p>
<% } %>
<form action="/register" method="post" name="form1">
<div class="form-group">
<label for="exampleInputEmail1">Name</label>
<input type="name" name="name" class="form-control" id="name" aria-describedby="nameHelp" placeholder="Enter name" value="">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Email</label>
<input type="email" name="email" class="form-control" id="email" aria-describedby="emailHelp" placeholder="Enter email" value="">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Password</label>
<input type="password" name="password" class="form-control" id="password" aria-describedby="emailHelp" placeholder="*********" value="">
</div>
<input type="submit" class="btn btn-primary" value="Add">
<a href="auth/login" class="btn btn-success ml-2">Login</a>
</form>
</body>
</html>
Este arquivo login.ejs contém o formulário de login.
Em seguida, abra seu arquivo home.ejs e atualize o seguinte código em seu arquivo:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<% if (messages.error) { %>
<p style="color:red"><%- messages.error %></p>
<% } %>
<% if (messages.success) { %>
<p style="color:green"><%- messages.success %></p>
<% } %>
<div class="card">
<div class="card-header">
Dashboard <b><%= name %></b>
</div>
<div class="card-body">
<h5 class="card-title">Welcome</h5>
<p class="card-text">You have successfully login</p>
<a href="logout" class="btn btn-primary">Logout</a>
</div>
</div>
</div>
</body>
</html>
Você pode usar o seguinte comando para executar o servidor de desenvolvimento:
//run the below command
npm start
after run this command open your browser and hit
http://127.0.0.1:3000/
Neste tutorial, você aprendeu como criar um aplicativo de registro de usuário e autenticação de login usando Node js, Express js e banco de dados MongoDB.