Skip to content

Commit 4d77245

Browse files
author
Vishwas Gopinath - I16165
committed
Authentication for special events
1 parent e61cac0 commit 4d77245

File tree

7 files changed

+162
-10
lines changed

7 files changed

+162
-10
lines changed

ngApp/package-lock.json

Lines changed: 100 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ngApp/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"body-parser": "^1.18.2",
2525
"core-js": "^2.4.1",
2626
"express": "^4.16.2",
27+
"jsonwebtoken": "^8.1.1",
2728
"mongoose": "^5.0.3",
2829
"rxjs": "^5.5.6",
2930
"zone.js": "^0.8.19"

ngApp/server/routes/api.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ const express = require('express');
22
const router = express.Router();
33
const mongoose = require('mongoose');
44
const User = require('../models/user');
5-
5+
const jwt = require('jsonwebtoken')
66
const db = "mongodb://testuser:[email protected]:23136/eventsdb";
77
// mongoose.Promise = global.Promise;
8+
89
mongoose.connect(db, function(err){
910
if(err){
1011
console.error('Error! ' + err)
@@ -13,6 +14,23 @@ mongoose.connect(db, function(err){
1314
}
1415
});
1516

17+
function verifyToken(req, res, next) {
18+
console.log(JSON.stringify(req.headers))
19+
if(!req.headers.authorization) {
20+
return res.status(401).send('Unauthorized request')
21+
}
22+
let token = req.headers.authorization.split(' ')[1]
23+
if(token === 'null') {
24+
return res.status(401).send('Unauthorized request')
25+
}
26+
let payload = jwt.verify(token, 'secretKey')
27+
if(!payload) {
28+
return res.status(401).send('Unauthorized request')
29+
}
30+
req.userId = payload.subject
31+
next()
32+
}
33+
1634
router.get('/events', (req,res) => {
1735
let events = [
1836
{
@@ -55,7 +73,7 @@ router.get('/events', (req,res) => {
5573
res.json(events)
5674
})
5775

58-
router.get('/special', (req,res) => {
76+
router.get('/special', verifyToken, (req, res) => {
5977
let specialEvents = [
6078
{
6179
"_id": "1",
@@ -121,7 +139,10 @@ router.post('/login', (req, res) => {
121139
if ( user.password !== userData.password) {
122140
res.status(401).send('Invalid Password')
123141
} else {
124-
res.status(200).send('Logged in succesfully')
142+
let payload = {subject: user._id}
143+
let token = jwt.sign(payload, 'secretKey')
144+
console.log(token)
145+
res.status(200).send({token})
125146
}
126147
}
127148
})

ngApp/src/app/app.module.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BrowserModule } from '@angular/platform-browser';
22
import { NgModule } from '@angular/core';
33
import { FormsModule } from '@angular/forms';
4-
import { HttpClientModule } from '@angular/common/http';
4+
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
55
import { AppRoutingModule } from './app-routing.module';
66

77
import { AppComponent } from './app.component';
@@ -11,6 +11,7 @@ import { EventsComponent } from './events/events.component';
1111
import { SpecialEventsComponent } from './special-events/special-events.component';
1212
import { AuthService } from './auth.service';
1313
import { EventService } from './event.service';
14+
import { TokenInterceptorService } from './token-interceptor.service';
1415

1516

1617
@NgModule({
@@ -27,7 +28,12 @@ import { EventService } from './event.service';
2728
HttpClientModule,
2829
AppRoutingModule
2930
],
30-
providers: [AuthService, EventService],
31+
providers: [AuthService, EventService,
32+
{
33+
provide: HTTP_INTERCEPTORS,
34+
useClass: TokenInterceptorService,
35+
multi: true
36+
}],
3137
bootstrap: [AppComponent]
3238
})
3339
export class AppModule { }

ngApp/src/app/auth.service.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ export class AuthService {
1010
constructor(private http: HttpClient) { }
1111

1212
registerUser(user) {
13-
return this.http.post(this._registerUrl, user, {responseType: 'text'})
13+
return this.http.post<any>(this._registerUrl, user)
1414
}
1515

1616
loginUser(user) {
17-
return this.http.post(this._loginUrl, user, {responseType: 'text'})
17+
return this.http.post<any>(this._loginUrl, user)
1818
}
19+
20+
getToken() {
21+
return localStorage.getItem('token')
22+
}
23+
1924
}

ngApp/src/app/login/login.component.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ export class LoginComponent implements OnInit {
1818
loginUser () {
1919
this._auth.loginUser(this.loginUserData)
2020
.subscribe(
21-
res => console.log(res),
21+
res => {
22+
console.log(res)
23+
localStorage.setItem('token', res.token)
24+
},
2225
err => console.log(err)
2326
)
2427
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Injectable, Injector } from '@angular/core';
2+
import { HttpInterceptor } from '@angular/common/http'
3+
import { AuthService } from './auth.service';
4+
@Injectable()
5+
export class TokenInterceptorService implements HttpInterceptor {
6+
7+
constructor(private injector: Injector){}
8+
intercept(req, next) {
9+
let authService = this.injector.get(AuthService)
10+
let tokenizedReq = req.clone(
11+
{
12+
headers: req.headers.set('Authorization', 'bearer ' + authService.getToken())
13+
}
14+
)
15+
return next.handle(tokenizedReq)
16+
}
17+
18+
}

0 commit comments

Comments
 (0)