· 5 years ago · May 15, 2020, 07:20 AM
1/// app.js //
2const express = require('express');
3const jwt = require('jsonwebtoken');
4const bcrypt = require('bcryptjs')
5
6const app = express();
7
8const mongoose = require('mongoose');
9const mongoDB = process.MONGO_DB_URI;
10mongoose.connect(mongoDB,
11 {
12 useNewUrlParser: true,
13 useUnifiedTopology: true
14 })
15 .catch(err =>{ console.log(`error connecting to mongoDB ${err}`) });
16
17const User = require('./models/User')
18
19app.post('/api/posts', verifyToken, (req, res) => {
20 jwt.verify(req.token, 'secretkey', (err, authData) => {
21 if(err) {
22 res.sendStatus(403);
23 } else {
24 res.json({
25 message: 'Post created...',
26 authData
27 });
28 }
29 });
30});
31
32app.post('/api/login', async(req, res) => {
33 // Mock user
34 const user = await User.findOne({ username: 'nice'})
35 bcrypt.compare('nice123', user.password, function(err, res){
36 if (err){ return next(err); }
37 if (res){
38 jwt.sign({user}, 'cat', { expiresIn: '30s' }, (err, token) => {
39 res.json({
40 token
41 });
42 });
43 }
44 })
45
46});
47
48// Verify Token
49function verifyToken(req, res, next) {
50 // Get auth header value
51 const bearerHeader = req.headers['authorization'];
52 // Check if bearer is undefined
53 if(typeof bearerHeader !== 'undefined') {
54 // Split at the space
55 const bearer = bearerHeader.split(' ');
56 // Get token from array
57 const bearerToken = bearer[1];
58 // Set the token
59 req.token = bearerToken;
60 // Next middleware
61 next();
62 } else {
63 // Forbidden
64 res.sendStatus(403);
65 }
66}
67
68app.listen(5000, () => console.log('Server started on port 5000'));
69
70
71
72// User Model //
73const mongoose = require('mongoose')
74
75const Schema = mongoose.Schema
76
77UserSchema = new Schema({
78 username: { type: String, maxLength: 70, required: true, unique: true},
79 password: { type: String, maxLength: 50, required: true},
80})
81
82module.exports = mongoose.model('User', UserSchema);