Angular登录校验失效 账号密码对错均提示登录成功问题求助
问题根因分析
1. 核心问题:后端未做身份校验
你当前的Spring Boot后端的/patientlogins接口没有配置身份校验逻辑,无论请求头中携带的账号密码是否正确,接口都返回2xx成功状态码。Angular的HttpClient请求只要收到2xx状态码就会执行subscribe的成功回调,因此无论输入的账号密码是否正确,都会触发登录成功的提示。
2. Angular侧额外逻辑缺陷
auth.service.ts的登录请求成功回调中,仅给服务内部的成员变量赋值,没有将用户信息写入sessionStorage:
- 后续调用
isUserLoggedIn()方法时永远返回false,即使本次提示登录成功,后续页面鉴权也会判定用户未登录。
修复方案
后端(Spring Boot)侧修复
如果你使用Spring Security实现Basic Auth校验:
- 配置SecurityFilterChain,指定
/patientlogins接口需要认证 - 自定义UserDetailsService实现,从数据库查询对应用户的ID和密码做匹配
- 校验失败时接口返回401未授权状态码,此时Angular会自动触发subscribe的错误回调,显示登录失败提示。
前端(Angular)侧修复
修改auth.service.ts的authenticationService方法,登录成功后将用户ID存入sessionStorage:
authenticationService(patId :number, password: String) { return this.http.get(`http://localhost:8080/patientlogins`, { headers: { authorization: this.createBasicAuthToken(patId, password) } }).pipe(map((res) => { this.patId = patId; this.password = password; // 新增会话存储逻辑 sessionStorage.setItem(this.USER_NAME_SESSION_ATTRIBUTE_NAME, patId.toString()) })); }
内容的提问来源于stack exchange,提问作者av7888
相关产品推荐
相关产品推荐

