Đăng nhập đăng xuất nodejs

Trong hướng dẫn này, chúng ta sẽ xem cách xây dựng API RESTful đăng nhập đăng xuất của người dùng bằng Nodejs và Express 4. Chúng tôi sẽ sử dụng Cấu trúc ứng dụng Node Express


Kiểm tra bài đăng liên quan trên Cấu trúc ứng dụng Node Express


Cấu trúc ứng dụng Node Express

Kiểm tra cách kết nối cơ sở dữ liệu MySql bằng Node Express


Cơ sở dữ liệu MySql với Node Express

Vì vậy, trước tiên, hãy bắt đầu với việc xây dựng cấu trúc ứng dụng

 

Xây dựng cấu trúc ứng dụng nút

Theo kiến ​​trúc thư mục nhanh của nút để xây dựng API RESTful

thư mục


|___package.json
|
|___app.js
|
|___controller
|        |__index.js
|        |__users.js
|
|___models
|        |__users
|        |      |__login.js
|        |      |__logout.js
|        |__db.js

# Nút Express 4

Đối với api đăng nhập và đăng xuất, chúng tôi sẽ sử dụng phương thức POST của RESTful Api. Khi nó gửi yêu cầu đến máy chủ. Đăng nhập api sẽ lấy dữ liệu từ cơ sở dữ liệu

 

Cài đặt phụ thuộc

Vì vậy, hãy bắt đầu với việc cài đặt các phụ thuộc
Chúng tôi sẽ sử dụng các mô-đun nút sau để xử lý phiên

  • Nút Express 4
  • trình phân tích nội dung
  • MySql

Cài đặt phụ thuộc thông qua lệnh sau

$ npm install

bưu kiện. json


   {
  "name": "expapp",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
"dependencies": {
    "async": "^1.5.2",
    "body-parser": "^1.14.1",
    "express": "^4.13.3",
    "express-session": "^1.12.1",
    "http-proxy": "^1.12.0",
    "mysql": "^2.9.0",
    "node-mysql": "^0.4.2",
  }
}

Khởi tạo và yêu cầu

Đầu tiên sẽ bao gồm các mô-đun nút yêu cầu

Thực hiện kết nối cơ sở dữ liệu của MySql bằng NodeJS express 4
NHÌN THẤY. Kết nối cơ sở dữ liệu Mysql trong NodeJS

ứng dụng. js


var express = require('express'); 
var app = express();
var bodyParser = require('body-parser'); 
var session = require('express-session');
var db = require('./models/db.js');

app.use(bodyParser.json());  
app.use(bodyParser.urlencoded({
  extended: true
}));// Body parser use JSON data

if(GLOBAL.SQLpool === undefined){
	GLOBAL.SQLpool = db.createPool(); //create a global sql pool connection
} 
app.use(require('./controllers'));
app.listen('3000', function(){
	console.log("Connected on port 3000.");
});

 

Thư mục điều khiển

Bộ điều khiển xác định các tuyến ứng dụng của bạn và logic của chúng. Bộ điều khiển sẽ xử lý các yêu cầu web, cung cấp các mẫu của bạn cho người dùng và tương tác với các mô hình của bạn để xử lý và truy xuất dữ liệu. Đó là chất keo kết nối và kiểm soát ứng dụng web của bạn

Tệp chỉ mục bộ điều khiển kiểm soát tất cả các tệp trong thư mục hiện tại và xuất sang các mô hình

/bộ điều khiển/chỉ mục. js


var express = require('express')
  , router = express.Router();
router.use('/api/users', require('./users'));
module.exports = router;

Api đăng nhập

Trước tiên, chúng tôi sẽ xây dựng api đăng nhập cho người dùng đã đăng ký. hãy bắt đầu với /controller/users. js

/bộ điều khiển/người dùng. js


var express = require('express'),
    router = express.Router(),
    signup = require('../models/users/login.js');

router.post('/login', function(req, res) {
  login.loginUser(req, res, function(err, data) {
    if (err) {
      res.json({ 'error': true, 'message': 'Error logged in' });
    } else {
      res.json({ 'success': true, 'data': data });
    }
  });
});

module.exports = router;

/bộ điều khiển/người dùng ở đâu. js kiểm soát phiên đăng nhập

 

Đăng nhập Models Directory

Các mô hình là các tệp nơi bạn tương tác với cơ sở dữ liệu của mình. Chúng chứa tất cả các phương thức và chức năng sẽ xử lý dữ liệu của bạn. Điều này sẽ tạo một phiên đăng nhập cho người dùng

/mô hình/người dùng/đăng nhập. js


var mysql =	require("../db.js"),
	mysqlPool = mysql.createPool();
/**
 * Defines login operations.
 * @class
 */
var login = function(){};

/**
 * Authenticate user.
 * @Function
 * @param callback
 */
login.prototype.loginUser = function(req, res, callback){
    var nowDate = new Date().toISOString().slice(0, 19).replace('T', ' '),
        params = [req.body.email, req.body.password,1],
        detailParams = [],
        updateParams = [],
	    loginUserQuery = 'SELECT * FROM users WHERE email = ? AND password = ?',
        getDetailQuery = 'SELECT id, email, gender, lastLogin, name, role, state FROM users WHERE id = ?',
        updateLastloginTime = 'UPDATE users SET lastLogin = ? WHERE id = ?'; //updates the date of lastlogin field
	mysqlPool.getConnection(function(err, connection){
		connection.query(loginUserQuery, params, function(err, rows, fields) {
           if(rows.length <= 0){
                connection.release();
                callback(true, null);
            }else{
                updateParams = [nowDate, rows[0].id];
                detailParams = [rows[0].id];
                req.session.user = rows[0];
                connection.query(updateLastloginTime, updateParams, function(err, rows, fields) {
                    connection.query(getDetailQuery, detailParams, function(err, rows, fields) {
                        connection.release();
                        callback(null, rows[0]);
                    });
                });
            }
		});
	});
}

module.exports = new login();

Bản demo trên ứng dụng Postman API để đăng nhập Api

Đăng nhập đăng xuất nodejs
Đăng nhập đăng xuất nodejs

Api đăng xuất

API đăng xuất sẽ đóng phiên đăng nhập. Yêu cầu do API đăng xuất thực hiện sẽ xóa dữ liệu đã lưu trong máy chủ và đưa trở lại trạng thái ban đầu
Vì vậy, hãy bắt đầu lại với bộ điều khiển

 

Thư mục điều khiển

/bộ điều khiển/người dùng. js


var express = require('express'),
    router = express.Router(),
    signup = require('../models/users/logout.js');

router.post('/logout', function(req, res) {
  logout.logoutUser(req, res, function(err, data) {
    if (err) {
      res.json({ 'error': data.error, 'message': data.message });
    } else {
      res.json({ 'success': data.success, 'message': data.message });
    }
  });
});

module.exports = router;

 

Thư mục người mẫu

Và bây giờ là /models/users/logout. js sẽ xóa phiên đã đăng nhập khỏi máy chủ và đưa về trạng thái null