1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| const express = require('express') const verifyToken = require('../middleware/token') const User = require('../models/userModel') const jwt = require('jsonwebtoken') const bcrypt = require('bcryptjs') const router = express.Router()
//註冊 router.post('/register', async(req, res) => { try { /* #swagger.summary='註冊', #swagger.description = '' */ /* #swagger.parameters['body'] = { in: 'body', description: '', required: true, schema: { $ref: "#/definitions/AddUser" } } */
/* #swagger.security = [{ "apiKeyAuth": [] }] */ const data = new User(req.body); //註冊時,Email使用 findByEmail 函式驗證 const email = await User.findByEmail(req.body.email) data.password = bcrypt.hashSync(req.body.password, 12); const token = jwt.sign({ _id: data._id ,username: data.username,email: data.email}, 'RESTFULAPI',{expiresIn: "24h"}).toString(); let userArr = { username: data.username, email: data.email, password: data.password, created: data.created, token:token } const user = await User.create(userArr); res.status(200).json(user); } catch (error) { res.status(500).json({message: error.message}) } })
//登入 router.post('/login',async (req, res) =>{ const { email, password } = req.body; try { /* #swagger.summary='登入', #swagger.description = '' */
/* #swagger.parameters['body'] = { in: 'body', description: '', required: true, schema: { $ref: "#/definitions/Login" } } */
/* #swagger.security = [{ "apiKeyAuth": [] }] */ let user = await User.findOne({email}); if (!user) return res.status(400).json({message: "用戶不存在"});
const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) return res.status(400).json({message: "密碼錯誤 !"});
const payload = { user: {id: user.id} };
jwt.sign(payload,user.email,{expiresIn: 3600},(err, token) => { if (err) throw err; res.status(200).json({token}); } ); } catch (e) { console.error(e); res.status(500).json({ message: "伺服器錯誤!" }); } })
//users驗證 router.delete('/users/:id', verifyToken,async(req, res) =>{ try { /* #swagger.tags = ['以下請先登入'], #swagger.summary='刪除使用者', #swagger.description = '' */ const {id} = req.params; const user = await User.findByIdAndDelete(id); if(!user){ return res.status(404).json({message: `沒有發現任何使用者 ${id}`}) } res.status(200).json(user ); } catch (error) { res.status(500).json({message: error.message}) } })
router.post("/welcome", verifyToken, (req, res) => { /* #swagger.tags = ['以下請先登入'], #swagger.summary='歡迎畫面', #swagger.description = '' */ console.log('req.body', req.body) res.status(200).send("Welcome 🙌 "); });
module.exports = router;
|