Worklight - 如何检查客户端是不是已经登录,然后通过登录屏幕

Posted

技术标签:

【中文标题】Worklight - 如何检查客户端是不是已经登录,然后通过登录屏幕【英文标题】:Worklight - How to check if a client is already logged in, then pass the login screenWorklight - 如何检查客户端是否已经登录,然后通过登录屏幕 【发布时间】:2013-11-21 10:33:31 【问题描述】:

当我在登录屏幕中第二次登录时出现以下错误。

    [ERROR   ] FWLSE0099E: An error occurred while invoking procedure  [project Klappr]KlapprAuthAdapter/submitAuthenticationFWLSE0100E:  parameters: [project Klappr]
       "arr": [
  "dGVzdDp0ZXN0"
   ]
  
   Cannot change identity of an already logged in user in realm 'KlapprAuthRealm'. The application must logout first.
    FWLSE0101E: Caused by:  [project Klappr]null 
                                                                                                           com.worklight.common.log.filters.ErrorFilter

在提交身份验证中(在适配器中),我检查用户名和密码是否正确,如果正确,我在 WorklightRealm 中设置 activeUser,如下所示:

    WL.Server.setActiveUser("KlapprAuthRealm",
                        userId:""+teacher.id,
                        displayName: teacher.voornaam,
                        credentials:loginstring,
                        attributes: 
                            "teacherId": teacher.id,
                        
                    );

如何检查用户是否已经登录?在我显示登录页面之前,这在客户端是最好的吗?或者我应该让他们能够在其他时间登录,如果他们已经登录,也返回 userId?

【问题讨论】:

【参考方案1】:

发生这种情况是因为您正在尝试设置活动用户,但它已经设置好了。一种可能的解决方案可能是在使用实际用户身份设置活动用户之前调用 WL.Server.setActiveUser("KlapprAuthRealm", null)。

【讨论】:

当我尝试这个时,它会导致我的应用程序进入一个尝试验证的无限循环。知道为什么我会看到这种行为吗? 我也看到了无限循环。【参考方案2】:

如果您想在提交前在客户端检查:

WL.Client.isUserAuthenticated("KlapprAuthRealm")

可能需要阅读 WL.Client.createChallengeHandler 上的文档来处理会话和登录流程

【讨论】:

以上是关于Worklight - 如何检查客户端是不是已经登录,然后通过登录屏幕的主要内容,如果未能解决你的问题,请参考以下文章

Worklight - jquery mobile |如何检查用户是不是在pagebeforeshow中登录?

如何在 ibm worklight 混合移动应用程序中处理客户端会话超时

Worklight:如何获取推送订阅的当前设备 ID

如何调试 IBM Worklight 适配器

Worklight 6.1:是不是有任何服务器调用要求在客户端进行加密缓存

Worklight 6.1 未连接到生产服务器