[Auth.js] [auth][error] AccessDenied: AccessDenied. Read more at https://errors.authjs.dev#accessdenied

2024. 7. 2. 21:23·🤖정보보안/💠1분지식

문제점

[auth][error] AccessDenied: AccessDenied. Read more at https://errors.authjs.dev#accessdenied

 

Auth.js | Errors

Authentication for the Web

authjs.dev

 

 

해결방법

OAuth의 경우 SignIn 로직을 타고 회원가입이 SignUp 없이 진행된다.

true false로 SignIn 처리를 하느넛을 알게되었다.

// auth.ts
import authConfig from "@/auth.config";
import { PrismaAdapter } from "@auth/prisma-adapter";
import db from "@/lib/db";
import { getUserById } from "@/data/user";
import NextAuth from "next-auth";
import { getAccountByUserId } from "@/data/account";

export const {
  handlers: { GET, POST },
  auth,
  signIn,
  signOut,
} = NextAuth({
  pages: {
    signIn: "/auth",
  },
  callbacks: {
    async session({ token, session }) {
      if (token.sub && session.user) {
        session.user.id = token.sub;
      }

      if (token.role && session.user) {
        session.user.role = token.role;
      }

      if (token.tag && session.user) {
        session.user.tag = token.tag;
      }

      if (session.user) {
        session.user.isTwoFactorEnabled = token.isTwoFactorEnabled;
      }

      if (session.user) {
        session.user.email = token.email;
        session.user.username = token.username;
        session.user.isOAuth = token.isOAuth;
      }

      return session;
    },
    async jwt({ token }) {
      if (!token.sub) return token;

      const existingUser = await getUserById(token.sub);

      if (!existingUser) return token;

      const existingAccount = await getAccountByUserId(existingUser.id);

      token.isOAuth = !!existingAccount;
      token.username = existingUser.username as string;
      token.email = existingUser.email as string;

      token.role = existingUser.role;
      token.isTwoFactorEnabled = existingUser.isTwoFactorEnabled;

      token.tag = existingUser.tag as string;

      return token;
    },
    async signIn({ user, account, profile }) {
      // OAuth인 경우 이로직을 타고 true로 흐름을 흘려보내서 로그인 성공하게 한다!
      if (account?.provider !== "credentials") return true;

      // 여기서는 ID/PW 처리를 위한 로직을 수행하게 된다!
      const existingUser = await getUserById(user.id);

      
      if (!existingUser?.emailVerified) return false;

      return !!existingUser;
    },
  },
  jwt: {
    maxAge: 60 * 60, // 1 hour
  },
  adapter: PrismaAdapter(db),
  session: {
    strategy: "jwt",
    maxAge: 60 * 60, // 1 hour
    updateAge: 60, // 1 minute
  },
  ...authConfig,
});

 

그다음 에러는 다음과 같이 일어난다. 그래서 null 값이 아닌 기본 빈값으로 한다.

Null constraint violation on the fields: (`username`)
model User {
  id                 String          @id @default(cuid())
  name               String?
  username           String?         @unique @default("")
  email              String?         @unique
저작자표시 비영리 변경금지 (새창열림)

'🤖정보보안 > 💠1분지식' 카테고리의 다른 글

[정보] MongoDB Replica Set 구성법(우분투 3EA)  (0) 2024.07.26
[Next.js] 개발 실력 상승에 도움되는 유튜브 추천  (0) 2024.07.16
[Auth.js] 로그인 직후 useSession undefined 현상 해결  (0) 2024.06.28
[정보] Ubuntu Server에서 Chrome Selenium 사용하기  (0) 2024.06.19
[정보] 메일서버 쉽게설치하기 docker mailserver  (0) 2024.06.17
'🤖정보보안/💠1분지식' 카테고리의 다른 글
  • [정보] MongoDB Replica Set 구성법(우분투 3EA)
  • [Next.js] 개발 실력 상승에 도움되는 유튜브 추천
  • [Auth.js] 로그인 직후 useSession undefined 현상 해결
  • [정보] Ubuntu Server에서 Chrome Selenium 사용하기
TwoIceFish
TwoIceFish
https://github.com/TwoIceFIsh
  • TwoIceFish
    Cyber-Luna
    TwoIceFish
  • 전체
    오늘
    어제
    • 분류 전체보기 (597)
      • 🤖정보보안 (81)
        • 💙블루팀 (25)
        • ❤️레드팀 (22)
        • 💜퍼플팀 (1)
        • 💠1분지식 (32)
      • 프로젝트 (14)
        • 💌 정보보안 메일링 시스템 (8)
        • 🔐 인증서 관리 시스템 (1)
        • 🏠금융 커뮤니티 (5)
      • 🐞프로그래밍 (49)
        • Next.js (9)
      • 기타정보 (68)
        • 🌏그릿요거트 (11)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 로켓펀치
    • 깃허브
    • 코코너츠
    • 그릿요거트
  • 링크

  • 공지사항

    • 안녕하세요
  • 인기 글

  • 태그

    악성메잃분석
    악성메일
    vpn 오픈소스
    응답없음
    삼성전자우
    servlet 404
    메일헤더분석
    jsp
    모의해킹
    유니티
    SK하이닉스
    애플페이 설정방법
    단일 도메인 인증서 여러개
    ISMS-P
    vpn 설치
    서브도메인 인증서
    방벙
    부동산 수익률 계산기
    nmap
    톰캣 서블릿
    인증서 여러개
    tomcat servlet
    코코넛츠
    jsp 200
    Visual Studio
    지갑 앱에 카드 추가
    eclipse
    와이파이 비밀번호 탈취
    수익률 계산기
    부트스트랩
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
TwoIceFish
[Auth.js] [auth][error] AccessDenied: AccessDenied. Read more at https://errors.authjs.dev#accessdenied
상단으로

티스토리툴바