Skip to content

Commit c8640dc

Browse files
Add authentication to routes using passport
1 parent 4475ff8 commit c8640dc

File tree

5 files changed

+103
-93
lines changed

5 files changed

+103
-93
lines changed

src/app.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
import config from './config/config'
2-
import express from 'express'
3-
import morgan from 'morgan'
4-
import cors from 'cors'
1+
import config from "./config/config";
2+
import express from "express";
3+
import morgan from "morgan";
4+
import cors from "cors";
55

6-
import passport from 'passport'
7-
import middlewarePassport from './midlewares/passport'
6+
import passport from "passport";
7+
import middlewarePassport from "./midlewares/passport";
88

9-
import authRoute from './routes/auth.routes'
9+
import authRoute from "./routes/auth.routes";
1010

11-
const app = express()
11+
const app = express();
1212

1313
//Settings
14-
app.set('port', config.port)
14+
app.set("port", config.port);
1515

1616
//Middlewares
17-
app.use(cors())
18-
app.use(morgan('dev'))
19-
app.use(express.json())
20-
app.use(express.urlencoded({extended: false}))
17+
app.use(cors());
18+
app.use(morgan("dev"));
19+
app.use(express.json());
20+
app.use(express.urlencoded({ extended: false }));
2121

2222
//Passport
23-
app.use(passport.initialize())
24-
passport.use(middlewarePassport)
23+
app.use(passport.initialize());
24+
passport.use(middlewarePassport);
2525

2626
//Routes
27-
app.use('/api/auth', authRoute)
27+
app.use("/api/auth", authRoute);
2828

29-
app.get('/', (req,res)=>{
30-
res.send(`The API is at http://127.0.0.1:${app.get('port')}`)
31-
})
32-
33-
export default app
29+
app.get("/", (req, res) => {
30+
res.send(`The API is at http://127.0.0.1:${app.get("port")}`);
31+
});
3432

33+
export default app;

src/config/config.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
export default {
22
port: process.env.PORT || 3000,
33
DB: {
4-
URI: process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/restapijwttspassport_db',
4+
URI:
5+
process.env.MONGO_URI ||
6+
"mongodb://127.0.0.1:27017/restapijwttspassport_db",
57
USER: process.env.MONGO_USER,
6-
PASSWORD: process.env.MONGO_PASSWORD
8+
PASSWORD: process.env.MONGO_PASSWORD,
79
},
8-
secretKey: process.env.SECRET_KEY || 'T_LHqi1hEFpsxPZ2heE.wkUKn3k3QSw.DdEK4EQ'
9-
}
10+
secretKey:
11+
process.env.SECRET_KEY || "T_LHqi1hEFpsxPZ2heE.wkUKn3k3QSw.DdEK4EQ",
12+
};

src/midlewares/passport.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import { Strategy, StrategyOptions, ExtractJwt } from 'passport-jwt'
2-
import config from '../config/config'
3-
import User from '../models/User'
1+
import { Strategy, StrategyOptions, ExtractJwt } from "passport-jwt";
2+
import config from "../config/config";
3+
import User from "../models/User";
44

55
const opts: StrategyOptions = {
66
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
7-
secretOrKey: config.secretKey
8-
}
7+
secretOrKey: config.secretKey,
8+
};
99

10-
export default new Strategy(opts, (payload,done)=>{
10+
export default new Strategy(opts, (payload, done) => {
1111
try {
12-
const user = User.findById(payload.id)
12+
const user = User.findById(payload.id);
1313
if (user) {
14-
return done(null,user)
14+
return done(null, user);
1515
}
16-
return done(null,false)
16+
return done(null, false);
1717
} catch (error) {
18-
console.log(error)
18+
console.log(error);
1919
}
20-
})
20+
});

src/models/User.ts

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { model, Schema, Document } from 'mongoose'
2-
import bcrypt from 'bcrypt'
1+
import { model, Schema, Document } from "mongoose";
2+
import bcrypt from "bcrypt";
33

44
export interface IUser extends Document {
55
displayName: string;
@@ -11,54 +11,57 @@ export interface IUser extends Document {
1111
status: boolean;
1212
}
1313

14-
const UserSchema = new Schema({
15-
displayName: {
16-
type: String,
17-
required: true
14+
const UserSchema = new Schema(
15+
{
16+
displayName: {
17+
type: String,
18+
required: true,
19+
},
20+
username: {
21+
type: String,
22+
minlength: 4,
23+
required: true,
24+
},
25+
email: {
26+
type: String,
27+
unique: true,
28+
trim: true,
29+
lowercase: true,
30+
required: true,
31+
},
32+
password: {
33+
type: String,
34+
minlength: 6,
35+
required: true,
36+
},
37+
avatar: {
38+
type: String,
39+
maxlength: 512,
40+
required: false,
41+
},
42+
role: {
43+
type: String,
44+
enum: ["SUPERADMIN", "ADMIN", "USER"],
45+
default: "USER",
46+
},
47+
status: {
48+
type: Boolean,
49+
default: true,
50+
},
1851
},
19-
username: {
20-
type: String,
21-
minlength: 4,
22-
required: true
23-
},
24-
email: {
25-
type: String,
26-
unique: true,
27-
trim: true,
28-
lowercase: true,
29-
required: true
30-
},
31-
password: {
32-
type: String,
33-
minlength: 6,
34-
required: true
35-
},
36-
avatar: {
37-
type: String,
38-
maxlength: 512,
39-
required: false
40-
},
41-
role: {
42-
type: String,
43-
enum: ["SUPERADMIN","ADMIN","USER"],
44-
default: "USER"
45-
},
46-
status: {
47-
type: Boolean,
48-
default: true
52+
{
53+
timestamps: true,
4954
}
50-
},{
51-
timestamps: true
52-
})
55+
);
5356

54-
UserSchema.pre<IUser>('save', async function(next){
55-
const user = this
56-
if (!user.isModified('password')) return next()
57+
UserSchema.pre<IUser>("save", async function (next) {
58+
const user = this;
59+
if (!user.isModified("password")) return next();
5760

58-
const salt = await bcrypt.genSalt(10)
59-
const hash = await bcrypt.hash(user.password, salt)
60-
user.password = hash
61-
next()
62-
})
61+
const salt = await bcrypt.genSalt(10);
62+
const hash = await bcrypt.hash(user.password, salt);
63+
user.password = hash;
64+
next();
65+
});
6366

64-
export default model<IUser>('User', UserSchema)
67+
export default model<IUser>("User", UserSchema);

src/routes/auth.routes.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import { Router } from 'express'
2-
import { signIn, signUp } from '../controllers/auth/auth.controller'
1+
import { Router } from "express";
2+
import { signIn, signUp } from "../controllers/auth/auth.controller";
3+
import passport from "passport";
34

5+
const router = Router();
46

5-
const router = Router()
7+
router.post("/signin", signIn);
8+
router.post("signup", signUp);
9+
router.get(
10+
"/profile",
11+
passport.authenticate("jwt", { session: false }),
12+
(req, res) => {
13+
res.send("Success!!");
14+
}
15+
);
616

7-
router.post('/signin', signIn)
8-
router.post('signup', signUp)
9-
//router.get('/profile', )
10-
11-
12-
export default router
17+
export default router;

0 commit comments

Comments
 (0)