【问题标题】:Invoke worklight SQL adapter procedure using AJAX使用 AJAX 调用 worklight SQL 适配器过程
【发布时间】:2023-03-02 22:36:02
【问题描述】:

有人可以举例说明如何使用 AJAX 调用在 Worklight 中调用和接收来自 SQL 适配器的响应吗?我正在使用 Worklight 6.0

我有应用级别的安全性。我需要调用一个不需要身份验证的过程(例如:注册帐户),因此需要使用 AJAX 调用适配器

这是我的适配器:

var invocationData = {
                    adapter : 'UserInfo',
                    procedure : 'addUserInfo',
                    parameters : [ customerData.firstName,
                            customerData.lastName, customerData.email,
                            customerData.province, customerData.zipPostal,
                            customerData.phoneNumber, customerData.streetName,
                            customerData.streetNumber, customerData.country,
                            customerData.city ]
                };
                WL.Client.invokeProcedure(invocationData, {
                    onSuccess : insertUserSuccess,
                    onFailure : insertUserFailure
                });

【问题讨论】:

    标签: ajax ibm-mobilefirst worklight-adapters


    【解决方案1】:

    我的理解是,您只是想从某个客户端使用 Ajax 调用适配器过程。

    和这个问题一样吗?

    Calling Worklight adapter from external app

    您可以在此处查看 HTTP API 的详细信息

    http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.0.0/com.ibm.worklight.help.doc/admin/r_http_interface_of_the_prod_server.html?lang=en

    更新: 另请注意,如果您配置了任何不同于“wl_unprotected”的安全测试(您的适配器是 100% 公开的,请小心!!)您可能需要额外的步骤来处理身份验证。

    如果您有一个默认适配器,但没有任何安全测试集,您可能会在第一次请求中收到 401 未授权,并且在 401 的正文中您可能会找到一个 WL-Instance-ID 属性,您必须一起发送有一个新的请求来获得使用它的授权。

    更新 2: Worklight/MobileFirst Platform 不启用 CORS(因此您不能“自然地”从外部网页使用 ajax 调用适配器)。可以通过使用将标头“Access-Control-Allow-Origin”添加到所有适配器响应的网关(可能是 IHS)来解决此问题。请注意,您正在处理安全问题,因此请确保您知道自己在做什么。

    【讨论】:

    • 谢谢大卫。我会试试看。
    • 嗨大卫,使用以下请求示例:“localhost:10080/TestProject/console/api/Adapters/get/UserInfo”我得到一个 404 未找到。我错过了什么吗?提前致谢
    • 您可以尝试使用 Worklight Studio 中的“调用过程”选项吗?要使用的 URL 与调用过程使用的 URL 相同,中间没有“/dev/”
    • 谢谢我使用了调用过程并在浏览器上看到了调用。这是格式: http://://invoke?adapter=&procedure=&parameters=[] 与链接中的格式不同。但这种格式有效。
    【解决方案2】:

    Worklight(6.3 及更低版本)适配器只能与 Worklight Server 一起使用。 如果您计划使用 Worklight 适配器,则需要使用 Worklight 框架提供的 API - 问题中提到的代码。

    您仍然可以使用常规 AJAX 请求 - 但这些不会/不能是发送到/由 Worklight 适配器发送的请求。

    WLJQ.ajax( "some-URL" )
    .done(function (data) {
        console.log(data);
    });
    

    如果目标确实需要通过 Worklight Server,并且它不受任何领域的保护,那么问题是什么?发送请求。

    也许您不应该在环境级别保护应用程序,而是在过程级别(在适配器 XML 中设置适配器过程的安全测试,而不是在 application-descriptor.xml 中的环境)。

    也许你需要更好地解释你的具体场景......

    【讨论】:

    • 如果我在应用程序级别取消保护,那么我如何允许第一页成为登录页面?在提出挑战之前需要完成一些点击/操作。我使用 AdapterAuthentication 来处理登录并保持应用程序级别的安全性。但它不允许我调用任何其他适配器,因为 WL.Client.connect 是在 wlCommonInit() 中完成的,现在所有请求都需要进行身份验证。我只是希望能够调用这个特定的过程来注册而无需身份验证。
    • 尝试将 securitytest="wl_unprotected" 添加到该特定过程。
    • 我按照建议添加了以下内容,但并没有区别对待它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多