我正在使用node-oidc-library
创建一个oauth授权服务器。
一切似乎都很好,除了注销用户。
文档对如何注销用户有点沉默,但我认为它隐藏在FAQ中,其中解释了如何显示用户是否登录。
当用户单击授权服务器上的注销链接时,我销毁会话:
const oidcContext = provider.app.createContext(req, res);
const session = await provider.Session.get(oidcContext);
await session.destroy();
这似乎是有效的,然而,它有副作用,也删除了用户所给予的任何授权。
所以下次用户登录时,他必须再次通过同意屏幕。
我的问题是:是否有办法注销用户,而不需要他再次登录时通过同意屏幕。
进一步调查后发现,授权id存储在会话中。因此,当会话消失时,到授权的链接也会消失,并且在下次登录时再次询问用户是否同意。
有一个解决方法:使用loadExistingGrant
方法。有一个说明这个函数的配方。
此函数可用于从会话中获取用户和客户端并加载授权,从而跳过同意屏幕。