通过AI生成代码,通过node-oidc-provider构建了本地的单点登录项目,使用自带的登录页面,整个登录过程很流畅
后来想着不用自带的登录页面,要自定义登录页面,于是接着让AI生成修改,页面顺利展示出来了,登录也成功了,但是在授权页面一直死循环了,就是说在授权页面点击了授权按钮之后,又进入了授权页面,整个出不去了
// 授权同意
app.post('/interaction/:uid/confirm', async (req, res) => {
const { uid } = req.params;
const details = await oidc.interactionDetails(req, res);
const { missingOIDCScope = [], missingOIDCClaims = [] } = details.prompt.details || {};
const result = {
consent: {
rejectedScopes: [],
rejectedClaims: [],
grantScopes: missingOIDCScope,
grantClaims: missingOIDCClaims,
remember: true
}
};
await oidc.interactionFinished(req, res, result, { mergeWithLastSubmission: true });
});
这个就是AI生成的授权按钮的代码,反复询问AI,AI说这个写法是完全正确的,一直强调检查cookie 检查客户端 检查这个 检查那个
经过了多轮检查与对话,实在没得检查了,我心想,自定义之前是好的,自定义之后就死循环了,我要去看看默认的授权代码是怎么实现的,于是扒到了下面这个代码

于是我直接把代码拷贝过来了
app.post('/interaction/:uid/confirm', async (req, res) => {
const {
prompt: { name, details }, grantId, session, params,
} = await provider.interactionDetails(req, res);
let grant;
if (grantId) {
// we'll be modifying existing grant in existing session
grant = await provider.Grant.find(grantId);
} else {
// we're establishing a new grant
grant = new provider.Grant({
accountId: session.accountId,
clientId: params.client_id,
});
}
if (details.missingOIDCScope) {
grant.addOIDCScope(details.missingOIDCScope.join(' '));
}
if (details.missingOIDCClaims) {
grant.addOIDCClaims(details.missingOIDCClaims);
}
if (details.missingResourceScopes) {
for (const [indicator, scope] of Object.entries(details.missingResourceScopes)) {
grant.addResourceScope(indicator, scope.join(' '));
}
}
const result = { consent: { grantId: await grant.save() } };
await provider.interactionFinished(req, res, result, {
mergeWithLastSubmission: true,
});
});
再次运行项目,不再死循环了
完整的单点登录项目:https://download.youkuaiyun.com/download/n_rts/91252072
1898

被折叠的 条评论
为什么被折叠?



