Angular, показывает, что токен был создан, но не перенаправляет меня на нужную мне страницу, происходит только при развертывании на сервере, работает в localhost - PullRequest
0 голосов
/ 27 мая 2019

У меня есть служба отдыха springboot и клиент Angular, я использовал JWT и Oauth2 для страницы входа в систему, когда я пробовал это на моем локальном хосте, работает отлично, но теперь, когда я пытаюсь развернуть файл war на сервере Tomcat, яне могу получить доступ к маршруту, который я хочу.Я установил маршрут 'cdns', который будет отображаться после входа в систему. Когда я открываю консоль Chrome, я вижу, что токен сгенерирован, но он не перенаправляет меня на страницу 'cdns', и даже если я пытаюсьперейдите по URL, он не позволит мне перейти на страницу входа в систему.Я сделал все это приложение после курса, и оно отлично сработало для парня курса с тем же кодом, так что idk что-то не так.

Это mi LoginService:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Router } from '@angular/router';
import { HOST, TOKEN_AUTH_USERNAME, TOKEN_AUTH_PASSWORD, TOKEN_NAME } from 
'./../_shared/var.constants';
import * as decode from 'jwt-decode';

@Injectable()
export class LoginService {

private url: string = `${HOST}/oauth/token`;

constructor(private http: HttpClient, private router: Router) {
 }

  login(usuario: string, contrasena: string) {
    const body = 
 `grant_type=password&username=${encodeURIComponent(usuario)}
  &password=${encodeURIComponent(contrasena)}`;

  return this.http.post(this.url, body, {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www- 
    form-urlencoded; charset=UTF-8').set('Authorization', 'Basic ' + 
    btoa(TOKEN_AUTH_USERNAME + ':' + TOKEN_AUTH_PASSWORD))
        });




     }

  estaLogeado() {
    let token = sessionStorage.getItem(TOKEN_NAME);
   return token != null;

 }

   cerrarSesion() {
     sessionStorage.clear();
     this.router.navigate(['login']);
  }


}

}

Этомой guardService:

import { LoginService } from './login.service';
import { TOKEN_NAME } from './../_shared/var.constants';
import { Injectable } from '@angular/core';
import { CanActivate, RouterStateSnapshot, ActivatedRouteSnapshot, Router 
} from '@angular/router';
import { tokenNotExpired } from 'angular2-jwt';



@Injectable()
export class GuardService implements CanActivate {

  constructor(private loginService: LoginService, private router: Router) 
{ }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    let token = JSON.parse(sessionStorage.getItem(TOKEN_NAME));

    if (token != null) {
      let access_token = token.access_token;

      let rpta = this.loginService.estaLogeado();
       if (!rpta) {
        sessionStorage.clear();
        this.router.navigate(['login']);
        return false;
      } else {
        if (tokenNotExpired(TOKEN_NAME, access_token)) {
          return true;
        } else {
          sessionStorage.clear();
          this.router.navigate(['login']);
          return false;
        }
      }
    } else {
      sessionStorage.clear();
      this.router.navigate(['login']);
      return false;
    }
  }

}

И это мой компонент входа в систему:

import { Component, OnInit } from '@angular/core';
import { LoginService } from '../_service/login.service';
import { TOKEN_NAME } from '../_shared/var.constants';
import { Router } from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {


  usuario: string;
  contrasena: string;

  error: string;

  constructor(private loginService: LoginService, private router: Router) 
{ }

  ngOnInit() {
  }

  iniciarSesion() {
     this.loginService.login(this.usuario, this.contrasena).subscribe(data 
      => {      

      if (data) {
        let token = JSON.stringify(data);
        sessionStorage.setItem(TOKEN_NAME, token);
        this.router.navigate(['cdns']);

       }
    }
     , (err) => {
       if (err.status !== 401) {
        this.error = "Error de conexión";
      }
      if (err.status === 401 || err.status === 400) {
        this.error = "Credenciales incorrectas";
      }
     });
  }

  cerrarSesion() {    
    sessionStorage.clear();
    this.router.navigate(['login']);
  }

}

Как я уже говорил ранее, это прекрасно работает, когда я запускаю его на локальном хосте, но не работает при развертываниина сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...