Angular 5中JwtHelperService无提供者错误(NullInjectorError)求助
解决Angular 5中JwtHelperService的NullInjectorError问题
这个错误我之前在Angular 5项目里也碰到过,本质是Angular的依赖注入系统找不到JwtHelperService的提供者——你只导入了服务类,但没有在模块中注册它,导致Angular不知道如何实例化这个服务。下面是具体的解决步骤:
1. 先确认安装的包版本兼容Angular 5
新版本的@auth0/angular-jwt要求Angular 6及以上,如果你之前没指定版本安装,大概率会装到不兼容的版本。建议安装适配Angular 5的2.x版本:
npm install @auth0/angular-jwt@2.2.0 --save
2. 在模块中注册JwtHelperService的提供者
打开你的AppModule(或者你用到AuthService的功能模块),把JwtHelperService添加到providers数组里,这样Angular就能识别并注入这个服务了:
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { JwtHelperService } from '@auth0/angular-jwt'; import { AuthService } from './auth.service'; // 导入你的认证服务 import { AppComponent } from './app.component'; @NgModule({ imports: [BrowserModule], declarations: [AppComponent], providers: [ JwtHelperService, // 把JwtHelperService注册为全局提供者 AuthService ], bootstrap: [AppComponent] }) export class AppModule { }
3. 补全isAuthenticated方法的逻辑(可选)
顺便帮你完善一下isAuthenticated的判断逻辑,既检查token是否存在,又验证是否过期:
public isAuthenticated(): boolean { const token = localStorage.getItem('token'); // 先判断token是否存在,再检查是否过期 return token != null && !this.jwtHelper.isTokenExpired(token); }
这样修改后,Angular就能正确注入JwtHelperService,你的认证服务应该就能正常工作了。
内容的提问来源于stack exchange,提问作者ValRob
相关产品推荐
相关产品推荐

