NetSuite
⚠️
将在
[email protected]
中发布资源
- 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 身份验证流程复选框。
- 将下面的
回调 URL
复制粘贴到重定向 URI
字段中。 - 然后选择您要使用的范围。
- REST Web 服务 (
rest_webservices
) - 访问 REST Web 服务。 - RESTLet (
restlets
) - 访问 RESTLet。 - SuiteAnalytics Connect (
suiteanalytics_connect
) - 访问 SuiteAnalytics Connect。
- REST Web 服务 (
- 添加您要使用的任何策略。
- 应用程序徽标(可选)(在要求用户授予对您的应用程序的访问权限时显示)。- 同意屏幕
- 应用程序使用条款(可选)- 包含您应用程序使用条款的 PDF 文件。- 同意屏幕
- 应用程序隐私策略(可选)- 包含您应用程序隐私策略的 PDF 文件。- 同意屏幕
- OAuth 2.0 同意策略首选项- 此设置决定用户是否在每次登录时都被要求授予对您的应用程序的访问权限,还是仅在他们首次登录时,或者从不。
- 保存集成记录。
- 集成记录将用于生成提供程序的
clientId
和clientSecret
。保存生成的价值以备后用
用户信息 RESTLet 处理程序
要使用此提供程序,您需要在 NetSuite 实例中创建一个用户信息 RESTLet。我们的 userinfo
URL 需要是一个套件或 RESTLet URL,它为我们提供了有关用户的信息。最好的方法是使用 N/runtime
模块首先获取基本信息。- 下面是一个 RESTLet 示例。确保部署并启用对“所有角色”的访问。
确保部署并使用任何使用 URI 的外部 RESTLet URL。
/**
* @NApiVersion 2.1
* @NScriptType Restlet
*/
define(["N/runtime"],
(runtime) => {
/**
* Defines the function that is executed when a GET request is sent to a RESTlet.
* @param {Object} requestParams - Parameters from HTTP request URL; parameters passed as an Object (for all supported
* content types)
* @returns {string | Object} HTTP response body; returns a string when request Content-Type is 'text/plain'; returns an
* Object when request Content-Type is 'application/json' or 'application/xml'
* @since 2015.2
*/
const get = (requestParams) => {
let userObject = runtime.getCurrentUser();
try {
log.debug({ title: "Payload received:", details: requestParams });
const { id, name, role, location, email, contact } = userObject;
log.audit({ title: "Current User Ran", details: name });
let user = {
id,
name,
role,
location,
email,
contact,
};
log.debug({ title: "Returning user", details: user });
return JSON.stringify(user);
} catch (e) {
log.error({ title: "Error grabbing current user:", details: e });
}
};
return {
get,
};
);
上面是返回基本运行时信息的示例。确保创建新的脚本记录和部署记录。保存部署记录后,您将获得 RESTLet 的 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, // EX: TSTDRV1234567 or 81555 for prod, and 1234567-SB1 for Sandbox accounts not "_" use "-".
// Returns the current user using the N/runtime module. This url can be a suitelet or RESTlet (Recommended)
// Using getCurrentUser(); So we match this schema returned from this RESTlet in the profile callback. (Required)
userinfo:
"https://1234567.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1",
// Optional
prompt: "login", // Required if you want to force the user to login every time.
scope: "restlets", // Optional defaults to "restlets rest_webservices". Enter the scope(s) you want to use followed by spaces.
}),
],
})