如何解决电报漫游器中的会话背后的逻辑是什么?
我的堆栈:Node JS
,Telegraf
,Sequelize (ORM)
,MySQL
。
我想了解sessions
的工作原理。
现在,我已经使用middleware
实现了用户加载:
import { TelegrafContext } from 'telegraf/typings/context';
import User from '@/models/User';
export default async (ctx: TelegrafContext,next: () => Promise<void>) => {
try {
const user = await User.findOne({
where: { telegram_id: ctx.from.id },});
if (user) ctx.User = user.toJSON();
} catch (error) {
console.log('[Auth Middleware]',error);
}
next();
};
我想实现Redis
会话系统,对于Telegraf
模块已经有一个现成的telegraf-session-redis
子模块。
它很适合我,并且能很好地完成工作,但是我遇到了一些我无法解决的问题。
我经常更新我和其他用户的用户数据。但是我无法在会话中正常更新此数据。
现在支票看起来像这样:
export default async (ctx: TelegrafContext,next: () => Promise<void>) => {
try {
if (ctx.session.user) return next();
const user = await User.findOne({
where: { telegram_id: ctx.from.id },});
if (user) ctx.session.user = user.toJSON();
} catch (error) {
console.log('[Auth Middleware]',error);
}
next();
};
现在请求的数量已大大减少,但是我在更新用户数据时遇到问题。
const user = await User.findByPk(ctx.session.user.id);
await user.update({
role: 'something',});
因此,在下一个获得角色的请求下,我将获得会话中的旧值。
我添加了以下条目以在更新用户数据时更新会话数据:
const user = await User.findByPk(ctx.session.user.id);
await user.update({
role: 'something',});
ctx.session.user = user.toJSON();
现在一切似乎都可以正常工作了。
但是当我更改当前在线的另一个用户的数据时,则无法访问他的上下文。
我通常如何才能不仅为自己而且为其他用户更新数据,以便他们接收有关自己的更新信息?
您可以在其中学习如何与机器人会话配合使用,我不太明白这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。