IBM Worklight 6.1 - Angularjs 控制器内的挑战处理程序

Posted

技术标签:

【中文标题】IBM Worklight 6.1 - Angularjs 控制器内的挑战处理程序【英文标题】:IBM Worklight 6.1 - Challenge Handler inside Angularjs controller 【发布时间】:2014-05-20 21:31:31 【问题描述】:

我正在使用我尝试使用 AngularJS 实现的基于适配器的身份验证。我有一个保护应用程序和所有程序的领域。我已经定义了一个处理身份验证相关活动的登录控制器:

注意:在 Chrome 和 Worklight 开发服务器上使用 MBS 进行测试

 $scope.sampleAppRealmChallengeHandler = WL.Client.createChallengeHandler("LoginBluePageRealm");
 $scope.sampleAppRealmChallengeHandler.isCustomResponse = $scope.isCustomResponse;
 $scope.sampleAppRealmChallengeHandler.handleChallenge = $scope.handleChallenge;    

登录视图是由于发出WL.Client.connect() 而显示的初始视图,身份验证可以很好地收集凭据,并从登录视图转换到主菜单视图。

我导致与服务器的连接失败(通过重新启动 WL 开发服务器),然后在应用程序中选择一个将调用受保护适配器调用的活动。我在 javascript 控制台中看到已到达 $scope.isCustomResponse(),但随后没有进入 $scope.handleChallenge();

在 $scope 中定义挑战支持是否有任何问题,或者是否需要在 $rootScope 级别定义它们。

感谢任何在 AngularJS 中定义身份验证的建议。

【问题讨论】:

你能制作一个演示项目来展示这个问题吗? 【参考方案1】:

您能否将日志添加到 isCustomResponse 以实际查看它所获得的 responseText/responseJson 属性?另外 - 在从 isCustomResponse 返回 true/false 之前记录您的响应。如果 isCustomResponse 返回 false,则不会调用 handleChallenge 函数,因此您可能会遗漏一些 if。

【讨论】:

【参考方案2】:

一般来说,你不应该定义任何你想通过 $scope 保存在 Angular 中的 javascript 对象。 Angular 可以随时销毁 $scope 变量。相反,将质询处理程序包装在 Angular 服务/工厂定义中,因为这些是持续存在的单例。这是一个很好的视频,我建议观看 Worklight + Angular。 https://www.youtube.com/watch?v=a89W_atlhjg

【讨论】:

以上是关于IBM Worklight 6.1 - Angularjs 控制器内的挑战处理程序的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.1 - 如何打开 https 链接?

IBM Worklight 6.1 - 无法重新生成 iPhone 本机文件夹

IBM Worklight 6.1 支持 iOS 64 位代码

IBM Worklight 6.1 - 如何将应用程序连接到远程 Worklight 服务器?

IBM Worklight 6.1 - Cordova 插件未执行

IBM Worklight 6.1 - iOS 6.1 上的 App Center 错误