首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用angular在jwt访问令牌过期时自动注销应用程序?

如何使用angular在jwt访问令牌过期时自动注销应用程序?
EN

Stack Overflow用户
提问于 2021-06-04 19:18:30
回答 2查看 809关注 0票数 0

我使用jwt令牌在我的angular(客户机)和spring boot (服务器)应用程序中对用户进行身份验证。我希望用户在令牌过期时自动注销应用程序。我使用了拦截器的概念来检查token是否过期,并向用户显示一个弹出窗口,提示“您的会话已过期”,并注销应用程序,如下所示:

代码语言:javascript
复制
export class TokenInterceptor implements HttpInterceptor {

constructor(private token: TokenStorageService, private router: Router) { }

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    {
        if (this.isTokenExpired()) {
            console.log("token is expired.");
            this.showSessionExpiredPopUp();
        }
        else {
            console.log("token is not expired.");
        }
        return next.handle(req);
    }
}

isTokenExpired() {
        const helper = new JwtHelperService();
        if (helper.isTokenExpired(this.token.getToken())) {
            return true;
        }
        return false;
    }

showSessionExpiredPopUp() {
        Swal.fire({
            html: 'Your session expired!',
        }).then((result) => {
            this.token.signout();
            window.location.href = '';
        });
    }

这是工作正常,留下了一个问题,这是与弹出相关的。我得到了这个会话过期弹出时,做登录请求时,也作为拦截器拦截发送登录请求到服务器。有没有办法在登录时不显示这个弹出窗口?在angular中处理这种自动注销场景的最好方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2021-06-04 19:21:33

当您检测到该令牌已过期时,将其完全删除。然后,您将能够区分令牌过期且根本不存在令牌的情况。

或者,你可以在拦截器中跳过登录入口的检查,这样它就会检查除登录请求之外的每个请求的过期时间。

票数 0
EN

Stack Overflow用户

发布于 2021-06-04 19:31:45

您可以更新拦截器和token过期方法,如下所示,我们在token过期后将其移除,并在验证时添加null检查:

代码语言:javascript
复制
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (this.isTokenExpired()) {
        console.log("token is expired.");
        // here remove the auth token
        this.showSessionExpiredPopUp();
    } else {
        console.log("token is not expired.");
    }
    return next.handle(req);
}

isTokenExpired() {
    const helper = new JwtHelperService();
    return this.token.getToken() && helper.isTokenExpired(this.token.getToken());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67836305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档