Цель: В этой статье вы узнаете jsonwebtoken, модель mongoose, как создать пользователя с помощью node, маршрутизатор.
Предварительные условия Перед завершением этой статьи вы должны установить все необходимые инструменты, включая: Visual Studio Code, Node Package Manager (NPM), Node, Postman, Mongo Compass.
Создайте модель (ProfileModel.js)
const mongoose = require('mongoose')
const DataSchema = mongoose.Schema({
FirstName : {type: String},
LastName : {type: String},
EmailAddress : {type: String},
MobileNumber : {type: String},
City : {type: String},
UserName : {type: String},
Password : {type: String}
});
const ProfileModel = mongoose.model('Profile', DataSchema)
module.exports = ProfileModel;
Создайте контроллер (ProfileController.js)
Сначала импортируйте ProfileModel. Объявите переменную reqBody для хранения данных тела. Затем создайте пользователя, используя модель ProfileModel
Установите jsonwebtoken
с помощью этой команды npm i jsonwebtoken
. Затем объявите в файле ProfileController.js
const ProfileModel = require("../models/ProfileModel");
var jwt = require('jsonwebtoken');
exports.CreateProfile = (req, res) => {
let reqBody = req.body;
ProfileModel.create(reqBody, (err, data) => {
if(err){
res.status(400).json({status: "Failed to user create", data: err})
}else{
res.status(200).json({status: "Successfully user created", data: data})
}
})
}
exports.UserLogin = (req, res) => {
let UserName = req.body['UserName'];
let Password = req.body['Password'];
// res.status(200).json({status: "Success", data: Password})
ProfileModel.find({UserName, Password}, (err, data) => {
if(err){
res.status(400).json({status: "Failed to login", data: err})
}else{
if(data.length > 0){
// create auth token
let Payload = {
exp: Math.floor(Date.now() / 1000) + (24 * 60 * 60),
data: data[0]
}
var token = jwt.sign(Payload, 'SecretKey123456789');
res.status(200).json({status: "Successfully Login", token: token, data: data})
}else{
res.status(401).json({status: "Unauthorized"})
}
}
})
}
exports.SelectProfile = (req, res) => {
let UserName = req.headers['username']
ProfileModel.find({UserName}, (err, data) => {
if(err){
res.status(400).json({status: "Failed", data: err})
}else{
res.status(200).json({status: "Success", data: data})
}
})
}
Функция find() используется для поиска определенных данных из базы данных MongoDB
ПолучениеUserName
из заголовка промежуточного ПО (AuthVerifyMiddleware).
Дополнительные две вещи, добавленные к обычному логину. Например, Payload и SecretKey. Также передайте токен в ответ token: token
.
let Payload = {
exp: Math.floor(Date.now() / 1000) + (24 * 60 * 60),
data: data[0]
}
var token = jwt.sign(Payload, 'SecretKey123456789');
Конфигурация по умолчанию (app.js)
// Basic import
const express = require('express');
const router = require('./src/routes/api')
const app = new express();
const bodyParser = require('body-parser')
// Database lib import
const mongoose = require('mongoose')
// Body parser implement
app.use(bodyParser.json())
// MongoDB database connection
let uri = 'mongodb://127.0.0.1:27017/PracticeDB'
let options = {user: '', pass: ''}
mongoose.connect(uri, options, (err) => {
if(err){
console.log(err)
}else{
console.log('Database Connection Success')
}
})
// Routing Implement
app.use('/api/v1', router)
// Undefined Route Implement
app.use("*", (req, res) => {
res.status(404).json({status: "Failed", data: "Not Found"})
})
module.exports = app;
Конфигурация маршрутов (api.js)
const express = require('express');
const ProfileController = require('../controller/ProfileController')
const AuthVerifyMiddleware = require('../middleware/AuthVerifyMiddleware')
const router = express.Router();
router.post('/CreateProfile', ProfileController.CreateProfile)
router.post('/UserLogin', ProfileController.UserLogin)
router.get('/SelectProfile', AuthVerifyMiddleware, ProfileController.SelectProfile)
module.exports = router;
Добавлено промежуточное ПО AuthVerifyMiddleware в маршрутизатор SelectProfile
Индексный файл (index.js)
const app = require('./app')
app.listen(5000, function(){
console.log('Server run at @5000 port')
})
Промежуточное ПО (AuthVerifyMiddleware.js)
var jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
let token = req.headers['token-key']
jwt.verify(token, "SecretKey123456789", (err, docoded) =>{
if(err){
res.status(401).json({status: "Unauthorized"})
}else{
// get username from docoded token & add with req header
let username = docoded['data']['UserName']
req.headers.username = username;
next();
}
} )
}
Теперь откройте Postman. Затем авторизуйте пользователя, указав основную информацию, и нажмите кнопку Отправить.
Получите ключ токена и вставьте его в поле токена заголовка.
После этого выберите SelectProfile и нажмите кнопку Send.
Спасибо, что прочитали. Счастливого пути.
Ссылка
Создание пользователя с помощью NodeJS
Вход в систему без JWT
jsonwebtoken
Функция Mongoose find()
Вход пользователя с помощью JWT