NetSuite
⚠️
next-auth@5.0.0-beta.18
버전에서 출시될 예정입니다.
리소스
- NetSuite - 통합 레코드 생성 (OAuth 2.0)
- NetSuite - OAuth 요청 승인
- NetSuite - OAuth 역할 구성
- NetSuite OAuth 2.0에 대해 더 알아보기
설정
콜백 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 URL
을Redirect URI
필드에 복사하여 붙여넣습니다. - 사용하려는 범위(scope)를 선택합니다.
- REST 웹 서비스 (
rest_webservices
) - REST 웹 서비스에 접근합니다. - RESTlets (
restlets
) - RESTLets에 접근합니다. - SuiteAnalytics Connect (
suiteanalytics_connect
) - SuiteAnalytics Connect에 접근합니다.
- REST 웹 서비스 (
- 사용하려는 정책을 추가합니다.
- 애플리케이션 로고 (선택 사항) (사용자가 애플리케이션 접근 권한을 부여할 때 표시됨) - 동의 화면
- 애플리케이션 이용 약관 (선택 사항) - 애플리케이션의 이용 약관이 포함된 PDF 파일 - 동의 화면
- 애플리케이션 개인정보 처리방침 (선택 사항) - 애플리케이션의 개인정보 처리방침이 포함된 PDF 파일 - 동의 화면
- OAuth 2.0 동의 정책 설정 - 이 설정은 사용자가 애플리케이션에 접근 권한을 부여할 때 매번 물어볼지, 처음 로그인할 때만 물어볼지, 아니면 전혀 물어보지 않을지 결정합니다.
- 통합 레코드를 저장합니다.
- 통합 레코드는 프로바이더의
clientId
와clientSecret
을 생성하는 데 사용됩니다. 생성된 값을 나중에 사용할 수 있도록 저장해 두세요.
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". 사용하려는 스코프를 공백으로 구분하여 입력
}),
],
})