当前位置: 首页 > 知识库问答 >
问题:

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

东门彬
2023-03-14

我使用了角度和节点。在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');
};

令牌永不过期。它总是在本地存储中。

共有1个答案

卢黎明
2023-03-14

你可以试试这样的

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

const delayInMs = 25 * 60 * 1000;
const alert25minutes$ = of('alert').pipe(delay(delayInMs));
alert25minutes$.subscribe(() => openAlertModal());
 类似资料:
  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。

  • 我一定是漏掉了什么! 我一直在尝试使用新的(对我来说是新的,来自delphi xe2环境)TOAuth2Authenticator、TRESTClient、TRESTRequest、TRESTResponse组件刷新过期的OAUTH2令牌 null 我假设(看来是错误的),如果我尝试对服务器执行请求,并且令牌已经过期,那么组件应该有足够的细节来意识到令牌已经过期,并在需要的时候刷新它。 我认为没有

  • 任何人都可以告诉我通过 OAuth2 生成刷新令牌的到期时间。实际上,它通常返回 2 个参数访问令牌和刷新令牌。我们使用刷新令牌,以便在访问令牌过期时生成新的访问 toke。但是谷歌日历版本3,我正在使用刷新令牌来调用日历API。但是在这里我遇到了令牌过期的问题。所以任何人都可以建议我当令牌过期时我该怎么办。据我说,刷新令牌没有过期时间。请检查下面的代码以使用刷新令牌创建日历服务:-

  • google oauth2刷新令牌何时过期? 我所说的过期是指过期是因为经过了某个时间跨度(不是因为用户已撤销访问权限或用户已请求新的刷新令牌) 我做了一些研究,没有一个引用官方的谷歌文档(我也找不到一个有效的谷歌文档) 其他一些问题表示,由于时间,它从未过期: 谷歌刷新令牌过期了吗? https://community.fitbit.com/t5/web-api-development/inva

  • 我正在编写一个应用程序,调用来自Flutter的google fit rest api。 我需要使用(https://pub.dev/packages/google_sign_in)与谷歌签名。我可以毫无问题地获得一个令牌(见是否有人设法从谷歌登录(Flutter)获得id令牌),但如何获得一个新的令牌时,它是过期的? 我不想要求用户每小时登录并获得一个新的令牌