0

我在 Android 应用程序中遇到身份验证问题,我使用的是 Worklight 版本 5.0.6。

我使用此身份验证配置创建了一个安全应用程序:

<securityTests>
    <mobileSecurityTest name="Sencha22-Mobile-SecurityTest">
        <testDeviceId provisioningType="none"/>
        <testUser realm="SampleAppRealm"/>
    </mobileSecurityTest>
</securityTests>

<realms>
    <realm loginModule="StrongDummy" name="SampleAppRealm">
    <className>com.worklight.core.auth.ext.FormBasedAuthenticator</className>
    </realm>
</realms>

<loginModules>
    <loginModule name="StrongDummy">
        <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
    </loginModule>
</loginModules>

我也有一个 ChallengeHandler 具有以下内容:

challengeHandler.submitLoginFormCallback = function(response) {
var isLoginFormResponse = challengeHandler.isCustomResponse(response);
if(isLoginFormResponse){
    //login unsuccessful
    Ext.Msg.alert('Error', "Login not successful", Ext.emptyFn);
}else{
    //login successful, reload the app
    WL.Client.reloadApp();
}
}

WL.Client.reloadApp() 语句在身份验证发生后正确执行,但是函数:

WL.Client.isUserAuthenticated("SampleAppRealm")

在 Android 上总是返回 NULL。

当在 Chrome 中作为公共资源查看时,该应用程序运行良好。

Android 上的 isUserAuthenticated 有问题吗?

4

2 回答 2

1

isUserAuthenticated 在 5.0.6 中将始终返回 true 或 false,并且完全基于 javascript(因此无论平台如何,它都应该是一致的)。我认为这里正在发生其他事情让你获得一个 NULL ......是否有任何 javascript 异常?一种检查方法是在 android 设备上使用 javascript 调试库,例如 weinre(将 javascript 文件添加到您的 html,然后连接到本地服务器以调试控制台输出: http: //people.apache.org/~pmuellr/ weinre/docs/latest/)。查看 javascript 输出中是否引发了任何异常。正如安东所说,您的设备也可能遇到时间问题。

旁注:Anton 是正确的:WL.Client.reloadApp() 可能会根据设备或浏览器的设置清除身份验证状态。

于 2013-05-16T14:55:17.287 回答
1

首先,我认为身份验证后重新加载应用程序不是一个好主意。现在。一旦应用程序连接到 WL 服务器,就会从 WL 服务器接收认证信息。要连接到 WL 服务器,您需要在 initOptions.js 中设置 connectOnStartup:true 或使用 WL.Client.connect() API。既然你说这个问题只发生在android上,我猜你有时间问题。确保在客户端成功收到来自服务器的响应后调用 isUserAuthenticated API。

于 2013-05-14T14:47:38.550 回答