我正在使用角度6,并根据节点的响应和令牌的到期日期创建了一个服务来保护某些路由。
因此,在我的工作服务中,它检查令牌是否过期,我添加了以下功能,该功能还可以检查服务器响应。
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class AuthGuard implements CanActivate {
constructor (
private authService:AuthService,
private router:Router,
private http: HttpClient
){}
canActivate(){
if(this.authService.tokenExpired()) {
//added this >>
this.authService.showRes().subscribe((data) =>
{
console.log('URL DDATA',data);
});
//<< added this
this.router.navigate(['/cms/login']);
return false;
} else {
return true;
}
}
}
包含auth
的{{1}}服务具有
showRes
在showRes(){
return this.http.get(this.router.url).pipe(map(res => res.json()));
}
中,我像这样app.module
使用该服务
,如果用户未登录,则节点以{path:'cms/profile',component:ProfileComponent,canActivate:[AuthGuard] }
角度路线服务不允许我使用它的轮廓。但是它没有得到服务器响应。
我看到
而不是returnres.json({redirect:true});
console.log('URL DDATA',data);
我很困惑。如何获得服务器响应?
谢谢
编辑
这是节点中间件的全部代码,用于检查令牌并将JSON发送回角度路由保护服务
GET http://localhost:4200/cms/login 404 (Not Found)
XHR failed loading: GET "http://localhost:4200/cms/login".
ERROR Response {_body: "<!DOCTYPE html>↵<html lang="en">↵<head>↵<meta char…<pre>Cannot GET /cms/login</pre>↵</body>↵</html>↵", status: 404, ok: false, statusText: "Not Found", headers: Headers, …}
我就这样使用中间件
const jwt = require('jsonwebtoken');
const user = require('../db');
const config = require('../db/config');
exports.required = ()=>{
return (req, res,next)=>{
const token = req.get('Authorization');
const key = config.key;
jwt.verify(token, key,function(err, decoded) {
if (err){ return res.json({redirect:true});}
if (decoded){
let dateNow = Math.floor(Date.now() / 1000);
if (dateNow > decoded.exp){ return res.json({redirect:true});}
next();
}
else { return res.json({redirect:true});}
});
}
}
编辑2
我向router.get('/', validate.required(), (req, res)=>{...
函数添加了简单的'Content-Type','application/json'
标头。没有进展。
同样奇怪的是,当我单击一条受保护的路由时,它会将我重定向到登录页面,在网址栏中,我看到showRes
,登录页面会按原样显示,但是会出现错误关于登录页面
http://localhost:4200/cms/login
答案 0 :(得分:1)
localhost
Web服务器端点是否按预期工作,即:
200 (OK)
),并且由于不正确的标头,安全限制或{{而返回错误消息(Commonly,400
,403
,404
) 1}},具体取决于您的情况据我所知,您的API未返回预期的令牌JSON数据(服务器返回NotFound
,这是当您从404 Not Found
请求时出现404错误的原因,并且这就是为什么您随后的http://localhost:4200/cms/login
和功能失败。
subscribe((data) =>
您似乎收到了默认的GET http://localhost:4200/cms/login 404 (Not Found)
XHR failed loading: GET "http://localhost:4200/cms/login".
ERROR Response {_body: "<!DOCTYPE html>↵<html lang="en">↵<head>↵<meta char…<pre>Cannot GET /cms/login</pre>↵</body>↵</html>↵", status: 404, ok: false, statusText: "Not Found", headers: Headers, …}
错误404
页面html
Here's an example of a 404 error https://stackoverflow.com/questions/thisPageDoesn'tExistSo404Error
直接回答您的问题
我很困惑。如何获得服务器响应?
您的服务器端点可能配置不正确。 如果此后还有其他问题,请评论或编辑,我很乐意详述。
请参见Postman utility for API testing and development: https://www.getpostman.com/
更多信息的参考文献:
风格偏好:
{_body: "<!DOCTYPE html> ... }
const
中的自记录块