Advertisement
Guest User

Untitled

a guest
Jan 13th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient } from '@angular/common/http';
  3. import { JwtHelperService } from '@auth0/angular-jwt'; // kirjasto jwt:n käsittelyyn
  4. import { Observable } from 'rxjs';
  5. import { Subject } from 'rxjs';
  6. import { map } from 'rxjs/operators';
  7.  
  8. @Injectable({
  9. providedIn: 'root'
  10. })
  11. @Injectable()
  12. export class AuthService {
  13.  
  14. private apiUrl = 'http://localhost:3001/login'; // autentikaatiopalvelun osoite
  15. public token: string;
  16. private jwtHelp = new JwtHelperService(); // helpperipalvelu jolla dekoodataan token
  17. private subject = new Subject<any>(); // subjectilla viesti navbariin että token on tullut
  18.  
  19. constructor(private http: HttpClient) {
  20. // Jos token on jo sessionStoragessa, otetaan se sieltä muistiin
  21. const currentUser = JSON.parse(sessionStorage.getItem('accesstoken'));
  22. this.token = currentUser && currentUser.token;
  23. }
  24. /* login-metodi ottaa yhteyden backendin autentikaatioreittiin, postaa tunnarit
  25. ja palauttaa Observablena true tai false riippuen siitä saatiinko lähetetyillä
  26. tunnareilla token backendistä */
  27. login(username: string, password: string): Observable<boolean> {
  28. // tässä ei käytetä JSON.stringify -metodia lähtevälle tiedolle
  29. return this.http.post(this.apiUrl, { username: username, password: password })
  30. .pipe(map((res) => {
  31. console.log(res); // loggaa alla olevan tyylisen vastauksen
  32. /*
  33. {success: true, message:
  34. "Tässä on valmis Token!",
  35. token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZ…zNzV9.x1gWEg9DtoPtEUUHlR8aDgpuzG6NBNJpa2L-MEhyraQ"}
  36. */
  37. const token = res['token']; // otetaan vastauksesta token
  38. if (token) {
  39. this.token = token;
  40. /* Tässä tutkitaan onko tokenin payloadin sisältö oikea.
  41. Jos on, laitetaan token sessionStorageen ja palautetaan true
  42. jolloin käyttäjä pääsee Admin-sivulle
  43. */
  44. try {
  45. // dekoodataan token
  46. const payload = this.jwtHelp.decodeToken(token);
  47. console.log(payload);
  48. // Tässä voidaan tarkistaa tokenin oikeellisuus //&& payload.isadmin === true
  49. if (payload.username === username ) {
  50. // token sessionStorageen
  51. sessionStorage.setItem('accesstoken', JSON.stringify({ username: username, token: token }));
  52. this.loginTrue(); // lähetetään viesti navbariin että vaihdetaan login:true -tilaan
  53. console.log('login onnistui');
  54. return true; // saatiin token
  55. } else {
  56. console.log('login epäonnistui');
  57. return false; // ei saatu tokenia
  58. }
  59. } catch (err) {
  60. return false;
  61. }
  62. } else {
  63. console.log('tokenia ei ole');
  64. return false;
  65. }
  66. }));
  67. }
  68. /* Ilmoitetaan navbariin että koska ollaan loggauduttu,
  69. niin Logout on mahdollista tehdä, joten vaihdetaan navbariin login-linkin
  70. tilalle logout-linkki
  71. */
  72. loginTrue(): Observable<any> {
  73. this.subject.next(true);
  74. return this.subject.asObservable();
  75. }
  76.  
  77. // logout poistaa tokenin sessionStoragesta
  78. logout(): void {
  79. this.token = null;
  80. sessionStorage.removeItem('accesstoken');
  81. }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement