如何结束用户会话令牌并刷新令牌,时间超过 25 分钟

Posted

技术标签:

【中文标题】如何结束用户会话令牌并刷新令牌,时间超过 25 分钟【英文标题】:how to end an user session token and refresh the token with the time is more than 25 minutes in angular 【发布时间】:2021-06-16 01:26:11 【问题描述】:

我正在使用 angular 和 nodejs。在 Nodejs 中,我使用的是 jwt-simple 库。

如何在用户闲置超过 25 分钟时结束会话并显示消息以确认注销或刷新令牌。

中间件

'use strict'

var jwt = require('jwt-simple');
var moment = require('moment');


var secret = 'clave-secreta-para-generar-el-token-9999';


exports.authenticated = function(req, res, next) 

    // Comprobar si llega autorización
    if (!req.headers.authorization) 
        return res.status(403).send(
            message: 'La petición no tiene la cabecera de authorization'
        );
    

    // Limpiar el token y quitar comillas
    var token = req.headers.authorization.replace(/['"]+/g, '');

    try 
        // Decodificar token
        var payload = jwt.decode(token, secret, false, 'HS256');
        console.log(payload);
      

        // Comprobar si el token ha expirado
        if (payload.exp <= moment(1 * 1).unix()) 
            return res.status(404).send(
                message: 'El token ha expirado'
            );
        

     catch (ex) 
        return res.status(404).send(
            message: 'El token no es válido'
        );
    

    // Adjuntar usuario identificado a request
    req.useradmin = payload;

    // Pasar a la acción
    next();

;

服务 jwt

'use strict'

var jwt = require('jwt-simple');
var moment = require('moment');

exports.createToken = function(user) 

    var payload = 
        sub: user._id,
        name: user.name,
        surname: user.surname,
        email: user.email,
        role: user.role,
        iat: moment().unix(),
        exp: moment().add(2, 'minutes').unix
    ;

    return jwt.encode(payload, 'clave-secreta-para-generar-el-token-9999');
;

令牌永不过期。它始终在 localStorage 中。

【问题讨论】:

this 有帮助吗? 【参考方案1】:

你可以试试这样的

import  of  from "rxjs";
import  delay  from "rxjs/operators";

const delayInMs = 25 * 60 * 1000;
const alert25minutes$ = of('alert').pipe(delay(delayInMs));
alert25minutes$.subscribe(() => openAlertModal());

【讨论】:

以上是关于如何结束用户会话令牌并刷新令牌,时间超过 25 分钟的主要内容,如果未能解决你的问题,请参考以下文章

何时应该实现刷新令牌以及如何保持无状态?

谷歌刷新令牌终身

有没有办法撤销另一个用户的访问令牌并结束他们在 Identity Server 4 中的会话?

查询如何存储和处理框架CSRF令牌

哪种 JWT 刷新策略更安全?

使用访问令牌和刷新令牌保持身份验证