login.component.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { Component, OnInit } from '@angular/core';
  2. import { LoginInfo } from '../auth/login-info';
  3. import { AuthService } from '../auth/auth.service';
  4. import { TokenStorageService } from '../auth/token-storage.service';
  5. import { MatSnackBar } from "@angular/material/snack-bar";
  6. import { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
  7. import { Router } from "@angular/router";
  8. @Component({
  9. selector: 'app-login',
  10. templateUrl: './login.component.html',
  11. styleUrls: ['./login.component.css']
  12. })
  13. export class LoginComponent implements OnInit {
  14. form: FormGroup = new FormGroup({
  15. email: new FormControl(''),
  16. password: new FormControl(''),
  17. });
  18. token?: string;
  19. isLoggedIn = false;
  20. isLoginFailed = false;
  21. roles: string[] = [];
  22. private loginInfo?: LoginInfo;
  23. constructor(private authService: AuthService,
  24. private tokenStorage: TokenStorageService,
  25. private _snackBar: MatSnackBar,
  26. private formBuilder: FormBuilder,
  27. private router: Router) {
  28. }
  29. ngOnInit() {
  30. if (this.tokenStorage.getToken() != null && this.tokenStorage.getToken() != '{}') {
  31. this.isLoggedIn = true;
  32. this.roles = this.tokenStorage.getAuthorities();
  33. }
  34. this.form = this.formBuilder.group({
  35. email: ['', [Validators.required, Validators.email]],
  36. password: ['', [Validators.required, Validators.minLength(8)]],
  37. })
  38. }
  39. get f(): { [key: string]: AbstractControl } {
  40. return this.form.controls;
  41. }
  42. onSubmit() {
  43. if (this.form.invalid) {
  44. return;
  45. }
  46. this.loginInfo = new LoginInfo(this.form.value.email, this.form.value.password);
  47. this.authService.attemptAuth(this.loginInfo).subscribe(
  48. data => {
  49. this.tokenStorage.saveToken(data.token || '{}');
  50. this.tokenStorage.saveUsername(data.username || '{}');
  51. this.tokenStorage.saveAuthorities(data.authorities || []);
  52. this.isLoginFailed = false;
  53. this.isLoggedIn = true;
  54. this.token = this.tokenStorage.getToken();
  55. this.roles = this.tokenStorage.getAuthorities();
  56. this.router.navigate(['/home']).then(() => {
  57. });
  58. },
  59. error => {
  60. this._snackBar.open(error.error?.message || 'Oops! Error occurred', 'Dismiss');
  61. this.isLoginFailed = true;
  62. }
  63. );
  64. }
  65. }