gpt4 book ai didi

typescript - Next Auth.js token 长度和 Cognito 的问题

转载 作者:行者123 更新时间:2023-12-03 08:19:59 26 4
gpt4 key购买 nike

我正在尝试使用 NextAuth.js 和 Cognito 在我的 Next.js 应用程序中实现身份验证。这是我的问题:当调用 jwt 回调时,我想在 session 中存储 3 个 token 和其他内容,但 token 最大长度为 4096 字节。我怎样才能实现这个?提前致谢!

  providers: [
Providers.Cognito({
clientId: process.env.COGNITO_CLIENT_ID,
domain: process.env.COGNITO_DOMAIN,
idToken: true,
scope: 'openid profile email aws.cognito.signin.user.admin',
}),
],
callbacks: {
async jwt(token, user, account, profile) {
// Initial sign in
if (account && user) {
// Max 4096 bytes
return {
accessToken: account.accessToken,
idToken: account.idToken, // Too long
accessTokenExpires: Date.now() + account.expires_in! * 1000,
refreshToken: account.refresh_token,
user, // Too long
profile, // Too long
};
}

// Return previous token if the access token has not expired yet
if (Date.now() < (token.accessTokenExpires as number)) {
return token;
}

// Access token has expired, try to update it
return refreshAccessToken(token);
},
async session(session, token) {
const sessionToken = session;
sessionToken.accessToken = token.accessToken;
sessionToken.idToken = token.idToken;
sessionToken.profile = token.profile;
return sessionToken;
},
},
});

最佳答案

我通过导出一个需要两个参数的函数来解决:req(请求)和res(响应)。这些参数允许我设置和获取我想要的所有 cookie。这是我的代码:

const getOptions = (req, res) => ({
providers: [
Providers.Cognito({
clientId: process.env.COGNITO_CLIENT_ID,
domain: process.env.COGNITO_DOMAIN,
idToken: true,
scope: 'openid profile email aws.cognito.signin.user.admin',
}),
],
callbacks: {
async jwt(token, user, account) {
// Initial sign in
if (account && user) {
const cookies = new Cookies(req, res);
cookies.set('userId', user.id);
cookies.set('idToken', account.idToken);
// Max 4096 bytes
return {
accessToken: account.accessToken,
accessTokenExpires: Date.now() + account.expires_in! * 1000,
refreshToken: account.refresh_token,
};
}

// Return previous token if the access token has not expired yet
if (Date.now() < (token.accessTokenExpires as number)) {
return token;
}

// Access token has expired, try to update it
return refreshAccessToken(token);
},
async session(session, token) {
const cookies = new Cookies(req, res);
const userId = cookies.get('userId');
const idToken = cookies.get('idToken');

const sessionToken = session;
sessionToken.accessToken = token.accessToken;
sessionToken.idToken = idToken;
sessionToken.userId = userId;
return sessionToken;
},
},
});

export default (req, res) => NextAuth(req, res, getOptions(req, res));

关于typescript - Next Auth.js token 长度和 Cognito 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68159271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com