4
respostas

Meu código da erro no setToken(string)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Bom dia, estou com esse erro, como faço para prosseguir?

4 respostas

Olá Maria Luiza,

Peço desculpas pela demora em te responder.

Esse erro está relacionada à tipagem, está mostrando que esse parâmetro precisa ser do tipo string, mas o token pode ser null. Porém, conferi aqui e não encontrei erros no código.

Qual a mensagem de erro que aparece quando você deixa o cursor em cima de UsuarioService, na linha 10?

Me envia, por favor, o arquivo token.service.ts para eu investigar se o erro está lá, ok?

Obrigada.

Claro, vou te mandar sim, esses são os erros e os arquivos.

1° Erro - src/app/login/usuario/user.service.ts:11:53 - error TS2345: Argument of type 'null' is not assignable to parameter of type 'User'.

11 private userSubject = new BehaviorSubject(null);


2º Erro

src/app/login/token/token.service.ts:12:14 - error TS7006: Parameter 'token' implicitly has an 'any' type.

12 setToken(token) {}

Como faço para definir que meu token venha como string ou null?

Tentei fazer assim:

setToken(token: string | null) {
    window.localStorage.setItem(KEY, token);
}

Porém da esse erro: Argument of type 'string | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'.


*user.service.ts *

import { Injectable } from '@angular/core'; import { TokenService } from '../token/token.service'; import { BehaviorSubject } from 'rxjs'; import { User } from './user'; import * as jtw_decode from 'jwt-decode';

@Injectable({ providedIn: 'root'})

export class UserService {

private userSubject = new BehaviorSubject<User>(null);
private userName: string = '';

constructor(private tokenService: TokenService) { 

    this.tokenService.hasToken() && 
        this.decodeAndNotify();
}

setToken(token: string) {
    this.tokenService.setToken(token);
    this.decodeAndNotify();
}

getUser() {
    return this.userSubject.asObservable();
}

private decodeAndNotify() {
    const token = this.tokenService.getToken();
    const user = jtw_decode(token) as User;
    this.userName = user.name;
    this.userSubject.next(user);
}

logout() {
    this.tokenService.removeToken();
    this.userSubject.next(null);
}

isLogged() {
    return this.tokenService.hasToken();
}

getUserName() {
    return this.userName;
}

} `


*token.service.ts *

import { Injectable } from '@angular/core';

const KEY = 'authToken';

@Injectable({ providedIn: 'root'}) export class TokenService {

hasToken() {
    return !!this.getToken();
}

setToken(token) {
    window.localStorage.setItem(KEY, token);
}

getToken() {
    return window.localStorage.getItem(KEY);
}

removeToken() {
    window.localStorage.removeItem(KEY);
}

}

Conferi com o código da aula e não encontrei erros. Esse projeto está no gitHub? Seria possível você subir o código e enviar o link do repositório pra gente poder testar?

Olá Maria Luiza, tudo bem?

Criei um tópico respondendo sua dúvida Desabilitação do botão em um componente Segue o link -> Desabilitar componente de botão com validação do formulário.

Espero ter ajudado, bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software