Skip to content
Migrating from NextAuth.js v4? Read our migration guide.

NetSuite

⚠️

next-auth@5.0.0-beta.18 버전에서 출시될 예정입니다.

리소스

설정

콜백 URL

https://example.com/api/auth/callback/netsuite

NetSuite는 http:// 콜백 URL을 지원하지 않습니다. 로컬에서 테스트할 때는 ngrok과 같은 서비스를 사용하여 로컬 https URL을 얻을 수 있습니다.

환경 변수

AUTH_NETSUITE_ID
AUTH_NETSUITE_SECRET
AUTH_NETSUITE_ACCOUNT_ID

설정

프로바이더를 설정하기 전에 다음 사항이 준비되어 있는지 확인해야 합니다.

  • 통합 레코드 생성
    • TBA 인증 흐름 체크박스를 해제합니다.
    • OAuth 2.0 인증 흐름 체크박스를 선택합니다.
    • 아래의 Callback URLRedirect URI 필드에 복사하여 붙여넣습니다.
    • 사용하려는 범위(scope)를 선택합니다.
      • REST 웹 서비스 (rest_webservices) - REST 웹 서비스에 접근합니다.
      • RESTlets (restlets) - RESTLets에 접근합니다.
      • SuiteAnalytics Connect (suiteanalytics_connect) - SuiteAnalytics Connect에 접근합니다.
    • 사용하려는 정책을 추가합니다.
      • 애플리케이션 로고 (선택 사항) (사용자가 애플리케이션 접근 권한을 부여할 때 표시됨) - 동의 화면
      • 애플리케이션 이용 약관 (선택 사항) - 애플리케이션의 이용 약관이 포함된 PDF 파일 - 동의 화면
      • 애플리케이션 개인정보 처리방침 (선택 사항) - 애플리케이션의 개인정보 처리방침이 포함된 PDF 파일 - 동의 화면
    • OAuth 2.0 동의 정책 설정 - 이 설정은 사용자가 애플리케이션에 접근 권한을 부여할 때 매번 물어볼지, 처음 로그인할 때만 물어볼지, 아니면 전혀 물어보지 않을지 결정합니다.
    • 통합 레코드를 저장합니다.
    • 통합 레코드는 프로바이더의 clientIdclientSecret을 생성하는 데 사용됩니다. 생성된 값을 나중에 사용할 수 있도록 저장해 두세요.

Userinfo RESTLet 핸들러

이 프로바이더를 사용하려면 NetSuite 인스턴스에 userinfo RESTlet을 생성해야 합니다.
우리의 userinfo URL은 사용자 정보를 제공하는 suitelet 또는 RESTLet URL이어야 합니다.
가장 좋은 방법은 N/runtime 모듈을 사용해 기본 정보를 먼저 가져오는 것입니다.
아래는 RESTlet 예제입니다. 반드시 배포하고 “All Roles”에 대한 액세스를 활성화하세요.

URI를 사용할 때는 반드시 외부 RESTLet URL을 배포하고 사용하세요.

/**
 * @NApiVersion 2.1
 * @NScriptType Restlet
 */
define(["N/runtime"],
 (runtime) => {
/**
 * GET 요청이 RESTlet으로 전송될 때 실행되는 함수를 정의합니다.
 * @param {Object} requestParams - HTTP 요청 URL의 매개변수; 모든 지원되는 콘텐츠 타입에 대해 객체로 전달된 매개변수
 * @returns {string | Object} HTTP 응답 본문; 요청 Content-Type이 'text/plain'일 때 문자열을 반환하고,
 *     'application/json' 또는 'application/xml'일 때 객체를 반환합니다.
 * @since 2015.2
 */
  const get = (requestParams) => {
    let userObject = runtime.getCurrentUser();
 
    try {
      log.debug({ title: "수신된 페이로드:", details: requestParams });
 
      const { id, name, role, location, email, contact } = userObject;
 
      log.audit({ title: "현재 사용자 실행", details: name });
 
      let user = {
        id,
        name,
        role,
        location,
        email,
        contact,
      };
 
      log.debug({ title: "사용자 반환", details: user });
 
      return JSON.stringify(user);
    } catch (e) {
      log.error({ title: "현재 사용자 정보 가져오기 오류:", details: e });
    }
  };
 
  return {
    get,
  };
);

위 예제는 기본 런타임 정보를 반환하는 방법을 보여줍니다.
새로운 스크립트 레코드와 배포 레코드를 생성해야 합니다.
배포 레코드를 저장하면 RESTlet의 URL을 얻을 수 있으며, 이 URL을 userinfo URL로 사용합니다.

예제 사용법

@auth.ts
import NextAuth from "next-auth"
import NetSuite from "next-auth/providers/netsuite"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [
    NetSuite({
      clientId: process.env.AUTH_NETSUITE_ID,
      clientSecret: process.env.AUTH_NETSUITE_SECRET,
      issuer: process.env.AUTH_NETSUITE_ACCOUNT_ID, // 예: TSTDRV1234567 또는 81555 (프로덕션), 1234567-SB1 (샌드박스 계정, "_" 대신 "-" 사용)
      // N/runtime 모듈을 사용하여 현재 사용자를 반환합니다. 이 URL은 suitelet 또는 RESTlet일 수 있습니다 (권장)
      // getCurrentUser()를 사용하므로, 이 RESTlet에서 반환된 스키마를 프로필 콜백에서 일치시킵니다 (필수)
      userinfo:
        "https://1234567.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1",
      // 선택 사항
      prompt: "login", // 매번 사용자가 로그인하도록 강제하려면 필수
      scope: "restlets", // 선택 사항, 기본값은 "restlets rest_webservices". 사용하려는 스코프를 공백으로 구분하여 입력
    }),
  ],
})
Auth.js © Balázs Orbán and Team - 2025