Json Ошибка данных в неопределенной записи Angular - PullRequest
0 голосов
/ 16 января 2020

Привет, я студент-разработчик в Angular. Я пытаюсь получить данные пользователя с токеном этого пользователя. Я принимаю код состояния 200. Я знаю, что это означает «ОК», но я сталкиваюсь с такой ошибкой, и я ее не уловил. Я не знаю, что не так в моей строке кода.

ОШИБКА HttpErrorResponse {заголовки: HttpHeaders, status: 200, statusText: "OK", URL: "https://localhost: 44365 / api / Auth / login", ok: false,…} заголовки: HttpHeaders {normalizedNames: Map (0), lazyUpdate: null, lazyInit: ƒ} статус: 200 statusText:" OK "url:" https://localhost: 44365 / api / Auth / login «ok: false name:« HttpErrorResponse »сообщение:« Ошибка Http во время анализа для https://localhost: 44365 / api / Auth / login »ошибка: ошибка : SyntaxError: Неожиданный токен e в JSON в позиции 0 в JSON .parse () в XMLHttpRequest.onLoad (http://localhost: 4200 / vendor. js: 24137: 51 ) at. ....

1017 * "текст": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiI2IiwidW5pcXVlX25hbWUiOiJhZG1pbiIsIm5iZiI6MTU3OTE4MzM1MiwiZXhwIjoxNTc5MjY5NzUyLCJpYXQiOjE1NzkxODMzNTJ9.9523aeTKL3t9COLJ1vJwlpadxeRnnLLhwBbWCmTDNU8DkmZ9zwCdjodwmYxoH06KHmUFvW0RMlna0ZKhJEid7g"
прото : Object прото : HttpResponseBase

Токен пользователя правильно приходят из моего веб-API. Мой метод публикации через веб-интерфейс ниже:

    [HttpPost("Login")]
    public async Task<IActionResult> Login ([FromBody] UserForLoginDto userForLoginDto)
    {
      var user = await _authRepository.Login(userForLoginDto.userLoginName,userForLoginDto.password);
        if (user==null)
        {
            return Unauthorized();
        }

       var tokenHandLer = new JwtSecurityTokenHandler();
       var key = Encoding.ASCII.GetBytes(_configuration.GetSection("AppSettings:Token").Value);

       var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new Claim[] {
            new Claim(ClaimTypes.NameIdentifier,user.userId.ToString()),
            new Claim(ClaimTypes.Name,user.loginName)
            }),

            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), 
            SecurityAlgorithms.HmacSha512Signature)
        };

        var token = tokenHandLer.CreateToken(tokenDescriptor);
        var tokenString = tokenHandLer.WriteToken(token);
        return Ok(tokenString);
    }

Ошибка возвращается моей службой. И мой service.ts здесь:

import { UserLoginDto } from '../dto/userLoginDto';
import { HttpHeaders, HttpClient } from '@angular/common/http';
import { JwtHelper,tokenNotExpired } from 'angular2-jwt'; 
import { Router } from '@angular/router';
import { UserRegisterDto } from '../dto/userRegisterDto';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  private apiUrl = "https://localhost:44365/api/Auth/";
  userToken: any;
  decodedUserToken: any;
  TOKEN_KEY = "token";
  aas :any;
  JwtHelper: JwtHelper = new JwtHelper(); 

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

  login(loginUser: UserLoginDto) {
    let headers = new HttpHeaders();
    headers = headers.append("Content-Type", "application/json") 
    this.httpClient.post(this.apiUrl + 'login', loginUser, {headers:headers}).subscribe(
      data => {
      this.saveToken(data);
      this.userToken = data;
      this.decodedUserToken = this.JwtHelper.decodeToken(data.toString()); 
      this.router.navigateByUrl('./home')
    })
  }}

Когда я вызываю data в методе входа в систему, data не определена. У вас есть совет для меня? Что мне делать ?

1 Ответ

0 голосов
/ 16 января 2020

Следующий код решил мою проблему.

login(loginUser: UserLoginDto) {
    let headers = new HttpHeaders();
    headers = headers.append("Content-Type", "application/json") //Http option gönder method 2

  this.httpClient.post(this.apiUrl + 'login', loginUser, {responseType: 'text'}).subscribe(data =>{
  this.saveToken(data);
  this.userToken = data;
  this.decodedUserToken=this.JwtHelper.decodeToken(data.toString());
  // this.router.navigateByUrl("./home");
  })
...