diff --git a/client/src/app/users/user-profile/user-profile.component.html b/client/src/app/users/user-profile/user-profile.component.html
index 9b8f3504202aab983a5623e14b3db63a95f90819..440e0c790810fc0f569fcb5a5f165e0906c9b58b 100644
--- a/client/src/app/users/user-profile/user-profile.component.html
+++ b/client/src/app/users/user-profile/user-profile.component.html
@@ -1,4 +1,8 @@
 <p>user-profile works!</p>
 <p>Userid: {{user.getUserId}}</p>
 <p>username: {{user.getUsername}}</p>
-<p>email: {{user.getEmail}}</p>
\ No newline at end of file
+<p>email: {{user.getEmail}}</p>
+
+<div>
+    <app-button text="Slett bruker" (click)="deleteUser()"></app-button>
+</div>
\ No newline at end of file
diff --git a/client/src/app/users/user-profile/user-profile.component.spec.ts b/client/src/app/users/user-profile/user-profile.component.spec.ts
index 3cc34bfe7937ceaea07988e2bed0029d17671949..6f0e7db6d9f7c4bf96bf48b6946eb4dbacb871fe 100644
--- a/client/src/app/users/user-profile/user-profile.component.spec.ts
+++ b/client/src/app/users/user-profile/user-profile.component.spec.ts
@@ -3,14 +3,16 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { RouterTestingModule } from '@angular/router/testing';
 import { AuthService } from 'src/app/authentication/auth.service';
 import { User } from 'src/app/models/user.model';
+import { SharedModule } from 'src/app/shared/shared.module';
 import { UserLoginFormComponent } from '../user-login-form/user-login-form.component';
+import { UserService } from '../user.service';
 
 import { UserProfileComponent } from './user-profile.component';
 
 describe('UserProfileComponent', () => {
   let component: UserProfileComponent;
   let fixture: ComponentFixture<UserProfileComponent>;
-  let mockAuthService;
+  let mockAuthService, mockUserService;
 
   beforeEach(async () => {
     // AuthService mock setup
@@ -22,6 +24,15 @@ describe('UserProfileComponent', () => {
       password: "1234",
       create_time: 513498
     }));
+
+    // UserService mock setup
+    mockUserService = jasmine.createSpyObj(['deleteUser']);
+    mockUserService.deleteUser.and.returnValue(
+      new Promise<any>(
+        (resolve) => {
+          resolve({data: []})
+        })
+    );
     
 
     await TestBed.configureTestingModule({
@@ -33,7 +44,8 @@ describe('UserProfileComponent', () => {
         ]) 
       ],
       providers: [
-        { provide: AuthService, useValue: mockAuthService }
+        { provide: AuthService, useValue: mockAuthService },
+        { provide: UserService, useValue: mockUserService }
       ]
     })
     .compileComponents();
@@ -60,4 +72,11 @@ describe('UserProfileComponent', () => {
       create_time: 513498
     }));
   });
+
+  it('should delete current user', async () => {
+    // Waits for ngOnInit and checks that we can delete the current user
+    await fixture.whenStable();
+    component.deleteUser();
+    expect(mockUserService.deleteUser).toHaveBeenCalledWith(4);
+  });
 });
diff --git a/client/src/app/users/user-profile/user-profile.component.ts b/client/src/app/users/user-profile/user-profile.component.ts
index 5ba47faffcd241a344e888f5772820e7021fc541..ddc341836ea839703bb22c6fde3645cb913eef55 100644
--- a/client/src/app/users/user-profile/user-profile.component.ts
+++ b/client/src/app/users/user-profile/user-profile.component.ts
@@ -13,9 +13,22 @@ import { UserService } from '../user.service';
 export class UserProfileComponent implements OnInit {
 
   user: User = new User();
-  constructor(private authService: AuthService, private router: Router) { }
+  constructor(private authService: AuthService, private userService: UserService, private router: Router) { }
 
   ngOnInit(): void {
     this.user = this.authService.getCurrentUser();
   }
+
+  /**
+   * Deletes user in database and navigates to login
+   */
+  deleteUser() {
+    this.userService.deleteUser(this.user.getUserId).then(data => {
+      console.log("Successfully deleted user: " + this.user.getUserId);
+      this.authService.logout();
+      this.router.navigateByUrl("/login");
+    }).catch(error => {
+      console.log(error);
+    });
+  }
 }
diff --git a/client/src/app/users/user.service.spec.ts b/client/src/app/users/user.service.spec.ts
index e0577bfad4be1dd5e26776350e9b918bd3e3b27b..79f633163ceec14baeb756b85c522f30db3d1b74 100644
--- a/client/src/app/users/user.service.spec.ts
+++ b/client/src/app/users/user.service.spec.ts
@@ -75,6 +75,35 @@ describe('UserService', () => {
         req.error(new ErrorEvent("400"));
       });
     });
+
+    describe('deleteUser', () => {
+      it('should delete user', () => {
+        // Deletes user with id = 2
+        service.deleteUser(2)
+        .then(data => {})
+        .catch(error => {
+          fail();
+        });
+  
+        // Mocks and checks HTTP request
+        const req = httpMock.expectOne("api/user/2");
+        expect(req.request.method).toBe("DELETE");
+        req.flush({
+          data: []
+        });
+      });
   
+      it('should reject on http error', () => {
+        // Deletes user with id = 2, but should catch HTTP error
+        service.deleteUser(2).then(data => {
+          fail();
+        }).catch(error => {});
+  
+        // Mocks and checks HTTP request
+        const req = httpMock.expectOne("api/user/2");
+        expect(req.request.method).toBe("DELETE");
+        req.error(new ErrorEvent("400"));
+      });
+    });
 });
 
diff --git a/client/src/app/users/user.service.ts b/client/src/app/users/user.service.ts
index f4def23c7d6289232ae86ea9d6f0c0dee50b3a35..4b40cadd532b39c817843ca65ed6082f19cec2f2 100644
--- a/client/src/app/users/user.service.ts
+++ b/client/src/app/users/user.service.ts
@@ -76,4 +76,28 @@ export class UserService {
   private get_all_users() {
     return this.http.get(this.userUrl);
   }
-}
+
+  /**
+   * Deletes an user from the database by id.
+   */
+   deleteUser(id: number): Promise<User> {
+    return new Promise<User>(
+      (resolve, reject) => {
+        this.delete_user(id).subscribe((data: any) => {
+          try {
+            resolve(data);
+          } catch (err: any) {
+            reject(err);
+          }
+        },
+        (err: any) => {
+          console.log(err.message);
+          reject(err);
+        });
+      }
+    );
+  }
+  private delete_user(id: number) {
+    return this.http.delete(this.userUrl + id);
+  }
+}
\ No newline at end of file
diff --git a/server/src/controllers/userController/index.ts b/server/src/controllers/userController/index.ts
index b0d49b9aeb5de3015d7700119d8fac43654ada7a..ae9257e515058eeb7d9ba90bbaace64a9b26bb5b 100644
--- a/server/src/controllers/userController/index.ts
+++ b/server/src/controllers/userController/index.ts
@@ -61,7 +61,7 @@ router.route('/:userId').put(async (request: Request, response: Response) => {
 
 /* ============================= DELETE ============================= */
 // Delete user from id `/api/user/:id`
-router.route('/:userId').delete(async (request: Request, response: Response) => {
+router.route('/:userId').delete(authenticateToken, async (request: Request, response: Response) => {
 	const userId = request.params.userId;
 	try {
 		const input = `DELETE FROM user WHERE (userId=?);`;