繁体   English   中英

如何使用 NextAuth.js 和 AWS Cognito 彻底破坏客户端 session

[英]how to completely destroy client side session with NextAuth.js & AWS Cognito

我正在使用 Next.js 和 NextAuth.js 以及亚马逊 Cognito 设置,我的问题是当我在注销后立即单击登录链接时,我的用户直接登录而无需提供凭据。

我的 [...nextauth].ts 看起来像这样:

import NextAuth from 'next-auth';
import CognitoProvider from 'next-auth/providers/cognito';

export const authOptions = {
  providers: [
    CognitoProvider({
      clientId: process.env.COGNITO_CLIENT_ID || '',
      clientSecret: process.env.COGNITO_CLIENT_SECRET || '',
      issuer: process.env.COGNITO_ISSUER_URL,
    }),
  ],
  debug: process.env.NODE_ENV !== 'production' ? true : false,
};

export default NextAuth(authOptions);

对于身份验证,我使用 Next helper 方法 signIn 和 signOut:

interface HomeProps {
  appTitle: string;
}

const Home: NextPage<HomeProps> = ({ appTitle }) => {
  const { data: session, status } = useSession();

  if (status === 'authenticated') {
    return (
      <>
        <Head>
          <title>{appTitle}</title>
        </Head>
        <p>Signed in as {session.user?.email}</p>
        <Link href="/">
          <a
            onClick={() => {
              signOut();
            }}
          >
            Log out
          </a>
        </Link>
      </>
    );
  }

  return (
    <>
      <Head>
        <title>{appTitle}</title>
      </Head>
      <Link href="/">
        <a
          onClick={(event) => {
            event.preventDefault();
            signIn('cognito', {
              callbackUrl: 'http://localhost:3000',
            });
          }}
        >
          Sign In
        </a>
      </Link>
    </>
  );
};

export default Home;

我假设客户端在注销后保留了有关先前登录用户的一些信息,但我不知道哪些数据以及它位于何处。

我想在注销后完全删除所有信息,以便在单击登录时始终要求用户提供凭据。 任何帮助,将不胜感激。

有一些解决方法涉及覆盖内置的 SignOut 方法,但显然,如果可以将其作为一项功能添加到 nextauth 中,那将是理想的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM