Đăng xuất nodejs mongodb

ElonMusk001 nói

Mục đích chính vẫn là học thím, làm cái web bán hàng để làm Project xin việc tiện thể bán hàng luôn đó. Có ai mua thì cho em xem qua cái web chơi
Cho em hỏi Nodejs chắc nhiệm phần nào của web nhỉ

Bấm để mở rộng

Phần back-end. Cái tìm kiếm với đăng nhập đăng xuất. Đại loại là khi anh đăng nhập anh gửi một yêu cầu chứa tên người dùng + mật khẩu tới back-end. Back-end nhận cái yêu cầu so sánh với cái dữ liệu trong cơ sở dữ liệu xem đăng nhập có hợp lệ không sau đó trả về cho anh một cái mã thông báo. Những request sau anh gửi kèm cái token đó thì back-end sẽ nhận biết là anh đã đăng nhập rồi. Còn tìm kiếm thì cũng na ná vậy anh gửi về một cái từ khóa back end sẽ dùng từ khóa anh gửi để tìm kiếm trong cơ sở dữ liệu rồi gửi lại kết quả cho anh. Nếu anh viết backend bằng nodejs thì nodejs đảm nhiệm phần này

 

Ở phần 4 này chúng ta sẽ tiến sâu hơn trong kiến ​​trúc của

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
0. Chức năng đăng ký và đăng nhập chính là hai chức năng làm tiền đề cho những chức năng tiếp theo của bất kỳ dự án nào. Chính vì vậy nó cũng quan trọng không thua những phần sau. Chúng ta cùng theo dõi tiếp phần 4 trong series "Build project sử dụng nodejs, expressjs, và mongodb"

Chuỗi xây dựng một dự án

Topic tài liệu. Xây dựng blog + trò chuyện bằng cách sử dụng nodejs, expressjs, mongodb, firebase

Phần 1 - Vì sao mỗi nhà phát triển nên có một blog

Phần 2 - Vì sao lại phát triển ứng dụng web sử dụng nodejs và expressjs?

Phần 3 - Setup project với nodejs, expressjs và kết nối mongodb

Phần 4. Tạo chức năng đăng nhập và đăng ký sử dụng nodejs, expressjs, mongodb

Yêu cầu tối thiểu cho phần 4

- Đọc lại phần 3

Sơ đồ về Schema Mongoose

Mọi thứ trong Mongoose bắt đầu với một

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
1. Mỗi một lược đồ đều ánh xạ với một Bộ sưu tập ở
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
0, ở đó những tài liệu này được định nghĩa theo nhiều kiểu như ví dụ dưới đây

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var blogSchema = new Schema({
    title:  String, // String is shorthand for {type: String}
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: Boolean,
    meta: {
      votes: Number,
      favs:  Number
    }
});

View SchemaTypes support bao nhiêu kiểu

  • Chuỗi
  • Con số
  • Ngày tháng
  • Đệm
  • Boolean
  • Trộn
  • ID đối tượng
  • Mảng
  • thập phân128
  • Bản đồ

OK, xem vậy thôi chứ không đi sau nhiều vào nó. Mất thời gian, mấy ông dev tự tìm hiểu về

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
1 nghe. CÒn bây giờ, né câu giờ chúng ta đi vào phần register. Mà nói qua đây để anh em về bí mật đặt tên của các tài liệu trong
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
1. Mỗi công ty tôi làm qua thì có nhiều kiểu định nghĩa khác nhau và rất khoa học. Có lần tôi được làm việc với một anh Anh làm ở Chứng Khoán ở ĐỨC, thì cũng học qua một cách quy định về cách đặt biến trong cơ sở dữ liệu rât hay. Nhưng chắc tôi không thể nói ra được. (. Thầy vì mỗi sinh viên được thấy thầy cô mình làm như thế này, ví dụ trong bảng người dùng thì sẽ quy ước như sau

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
5 Kiểu là vậy, nhưng hầu như trong môi trường công ty, họ không hề làm những điều quy định như vậy. Thay vào đó họ có một quy định rất hay, họ sẽ đưa ra những biểu tượng đó để cho team hiểu mà thôi. Tôi biết những trò chơi đó, nhưng ở đây tôi không thể nói ra, dù rất muốn. Xin lỗi. Cullback long line nữa rồi, đê

Tạo Schema Mongodb cho 2 bộ sưu tập Người dùng và Đăng nhập

Trước tiên, quy trình sẽ không giống như các bạn sinh viên hay làm là cho chung vào một bộ sưu tập. Nhưng cách tôi làm có thể khác, là bộ sưu tập đăng nhập chỉ lưu về hệ thống đăng nhập thôi. Other User Collection là nơi chứa thông tin chi tiết. Bây giờ chưa hiểu nhưng hết dự án này thì chúng ta sẽ hiểu hơn những điều tôi nói

ghi chú. Những bạn nào chưa biết thư mục nào thì vui lòng xem lại phần 3, và có thể git clone sourcecode về và có thể làm tiếp đến đây

Tạo tệp

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
6

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)

Tham số

email và mật khẩu thì quá dễ rồi, nhưng 3 tham số còn lại thì để lưu nhật ký cho sau này, hệ thống xem người dùng đăng nhập hệ thống bao nhiêu thời gian. vân vân

ghi chú. mặc định sẽ có hiệu lực khi bạn không khai báo trong quá trình tạo hàm

Tiếp tục tập tin

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
7

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
0

Các nhà phát triển có thể thấy giữa đăng nhập và người dùng có một khóa chung đó là email. Và chúng sẽ đặt email là khóa chính của bảng Người dùng thay vì id mặc định của cầy mangut. Chính vì vậy, tôi sẽ tạo chỉ mục cho email này. Các tham số, không khác nhau là mấy, chỉ là lưu thông tin thôi

Bộ điều khiển mã

In file

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
8 ta has as after

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
2

Khai báo các route trong express route, có một điều lưu ý ở đây đó là file

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
9, mình sẽ nói sau bài này

Trong bộ điều khiển thư mục, tôi sẽ tạo thêm hai bộ điều khiển bao gồm login_controller. js và user_controller. js. Mỗi bộ điều khiển này sẽ có chức năng khác nhau, nên tách ra, làm lại như vậy các bạn sẽ quen cách làm việc trong một nhóm, chứ không phải riêng như các bạn vừa làm.

Nhiệm vụ tập tin

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
00 thì sẽ làm công việc chung, nhưng tôi khuyên các bạn cũng nên tách ra sau này, vì sẽ lớn hơn và có nhiều người dùng tham gia làm hơn

Trong tệp index_controller, ta sẽ khai báo như sau cho chức năng đăng nhập khi Người dùng gửi từ http. //máy chủ cục bộ. 8080/đăng nhập

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
5

Ở đó chia ra 2 trường hợp đó là

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
01 và
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
02.
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
01 là hiện giao diện,
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
04 là khi gửi dữ liệu về xử lý

KHÔNG.

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
05 ở đây tôi chia ra 2 trường hợp để biết khi nào đăng nhập và đăng ký

Sau khi đăng ký thành công, giao diện sẽ chuyển sang đăng nhập cho người dùng sử dụng. Sau khi đăng nhập thành công thì

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
1

Đây chính là thành công khi chúng ta đăng nhập, sẽ tạo phiên cho

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
06, đồng thời chuyển hướng sang trang hồ sơ để Người dùng có thể cập nhật lại thông tin cần thiết. KHÔNG. Giữ phiên trong nodejs bạn xem ở bài viết này "Phiên NodeJS sử dụng Express Sessionanonystick. "

Code trong file index_Controller. js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
3

Kiểm tra khóa bị thiếu trong Đối tượng

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
4

Hàm này được sử dụng, khi bạn muốn kiểm tra xem thiếu thông số nào, trước khi đưa dữ liệu vào cho cầy mangut

Và điều cuối cùng nói về bài viết này đó là phần mềm trung gian checkLogin. Bình thường nếu như chúng ta không triển khai một

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
9 để làm việc đó thì điều đó đồng nghĩa với việc bạn phải kiểm tra xem có phiên hay không từng phần. Như trong đoạn mã này,

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
6

Có nghĩa là muốn truy cập http. //máy chủ cục bộ. 8080/profile thì phải kiểm tra qua chức năng checkLogin xem đã có phiên hay chưa, nếu chưa có thì sẽ chuyển hướng qua trang đăng nhập. And back if have, will go to page profile. Please view content of function check Đăng nhập là gì?

Tiện ích tệp/phần mềm trung gian. js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const login = new Schema({
    email: { type: String, default: ''},
    password: { type: String, default: ''},

    loginAt: { type: Date, default: Date.now},
    logoutAt: { type: Date, default: Date.now},
    action: { type: String, default: 'System'},
    
}, { collection: 'login' })

// login.index({ first: 1, last: -1 }) Nơi đánh index
module.exports = mongoose.model('login', login)
7

Kết quả phần 5

Tôi đã gửi tập tin đăng nhập. ejs and profile. ejs up github, các bạn bây giờ có thể up lên đó để clone về tiếp

Tạo chức năng cập nhật thông tin Người dùng, mật khẩu và phần quyền

Tới đây, tôi xin phép được dừng tại đây, ở phần 5 chúng ta sẽ khám phá thêm những chức năng tiếp theo đó là "cập nhật thông tin User, password và phân quyền". Hy vọng ở phần 4 này, sẽ giúp bạn có góc nhìn sâu hơn. Nếu bạn chưa hiểu, xin vui lòng xem lại các bài viết trước dây