# node **Repository Path**: caohuiboss/node ## Basic Information - **Project Name**: node - **Description**: node+jwt+express用户登录注册改密码 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2019-07-19 - **Last Updated**: 2022-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # node+express+jwt简单用户登录注册改密码 > 1.初始化 npm init ->npm i > 2.安装 express mongoose body-parser > 3.安装 passport passport-jwt jsonwebtoken > 4.创建app.js 初始化express mongoose bodyParser passport ``` const express = require('express') const mongoose = require('mongoose') const bodyParser = require("body-parser") const passport = require("passport") const app = express() ``` > 5.链接数据库 ``` mongoose.set('useFindAndModify', false) mongoose.connect("mongodb://localhost:27017/MobileUser", { useNewUrlParser: true }, () => { console.log("数据库连接成功"); }); ``` > 6.使用 body-parser 中间件 ``` app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); ``` > 7.passport 初始化 ``` app.use(passport.initialize()); require("./config/passport")(passport); passport.js =>{ const JwtStrategy = require('passport-jwt').Strategy; const ExtractJwt = require('passport-jwt').ExtractJwt; const User = require("../models/user"); const keys = require("../config/keys"); const opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); opts.secretOrKey = keys.secretOrkey; module.exports = passport => { passport.use(new JwtStrategy(opts, (jwt_payload, done) => { console.log(jwt_payload); User.findById(jwt_payload.id).then(user => { if (user) { return done(null, user); } return done(null, false); }).catch(err => console.log(err)); })); } } ``` > 8.建立模型 ``` const mongoose = require("mongoose"); const Schema = mongoose.Schema; // create Schema 创建数据格式 const UserSchema = new Schema({ username: { type: String, required: true }, password: { type: String, required: true }, date: { type: Date, default: Date.now } }) module.exports = User = mongoose.model("users", UserSchema); ``` > 9.建立api ``` // @login 和 register const express = require("express"); const router = express.Router(); const jwt = require('jsonwebtoken'); const keys = require("../config/keys"); const passport = require("passport"); const User = require("../models/user"); // $route get 请求 api/users/test // @desc 返回请求的json数据 // @access public router.get("/test", (req, res) => { res.json({ msg: "test success!!!" }) }) // $route get 请求 api/users/register // @desc 返回请求的json数据 // @access public router.post("/register", (req, res) => { //查询数据库是否有数据 User.findOne({ username: req.body.username }).then((user) => { if (user) { return res.status(400).json("用户被注册") } else { const newUser = new User({ username: req.body.username, password: req.body.password, }); newUser.save().then(user => res.json(user)).catch(err => console.log(err)) } }) }) // $route post 请求 api/users/login // @desc 返回token jwt passport // @access public router.post("/login", (req, res) => { const username = req.body.username; const password = req.body.password; User.findOne({ username }).then(user => { if (!user) { return res.status(404).json("用户不存在"); } else { // 密码匹配 if (password == user.password) { const rule = { id: user.id, username: user.username, }; jwt.sign(rule, keys.secretOrkey, { expiresIn: 3600 }, (err, token) => { if (err) throw err; res.json({ success: true, token: "Bearer " + token }); }) } else { return res.status(400).json("密码错误!"); } } }) }) // $route get 请求 api/users/info 用户信息 // @desc 返回 info user // @access private router.get("/info", passport.authenticate("jwt", { session: false }), (req, res) => { res.json({ id: req.user.id, username: req.user.username, }); }) // $route post 请求 api/users/updataPassword 更改密码 // @desc 返回 新密码 // @access private router.post("/updataPassword", (req, res) => { let newPassword = req.body.password; User.update({ _id: req.body.id }, { $set: { password: newPassword } }, (error) => { if (error) { res.json({ message: '密码修改失败' }) } else { res.json({ message: '密码修改成功' }) } }) }) module.exports = router; ```