在Liferay中调用login()函数时出现UserEmailAddressException

时间:2013-07-10 12:04:02

标签: java authentication login liferay

我想在我的网站上进行LinkedIn身份验证。他们的API返回所需的信息,创建帐户功能正在运行。但是,当我尝试登录网站时,我似乎遇到了一些问题。

当我调用UserEmailAddressException方法时,我似乎得到LoginUtil.login

at com.liferay.portal.service.impl.UserLocalServiceImpl.authenticate(UserLocalServiceImpl.java:2480)

失败
if (authType.equals(CompanyConstants.AUTH_TYPE_EA)) {
    if (!Validator.isEmailAddress(login)) {
        throw new UserEmailAddressException();
    }
}

这是我的代码:

boolean rememberMe = true;
String authType = CompanyConstants.AUTH_TYPE_EA;
try {
    LoginUtil.login(request, response, 
            String.valueOf(user.getUserId()), user.getPassword(), rememberMe, authType);
    }
    catch (UserEmailAddressException ueae) {
        ueae.printStackTrace();
    }

用户通过电子邮件地址进行身份验证,所以我想这应该是正确的身份验证类型?

我在portal-ext.properties中添加了company.security.auth.type=emailAddress,但是我得到了与没有此设置相同的错误。

由于Liferay文档不满意,我想知道如何正确调用login()函数,以便我的用户使用其LinkedIn帐户登录。

1 个答案:

答案 0 :(得分:1)

很难从你提供的代码量中回答这个问题。

首先:关于文档。通过使用LoginUtil来判断,您似乎正在修改Liferay的内部代码以实现您的功能。这是一个内部API,不能保证稳定,最有可能最后记录(API文档已经改进很多,但主要是关于外部公共API)。

您可能希望研究Liferay用于实现其他外部单点登录系统的ServletFilter的实现。许多客户/用户已经成功实现了这些(我没有查看过该文档的状态,但是您可以找到几种SSO实现)

此外,它可能有帮助,哪个电子邮件地址应该是无效的 - 从你的代码看起来你正在使用user.getUserId()(这是数字),但你声明你要求登录到通过电子邮件。

最后,如果您已通过UI配置了登录方法,则会将其保存到数据库中 - 该设置将获胜。所以请检查ControlPanel / Portal / Portal设置/身份验证/“用户如何进行身份验证?”确保该设置实际上是在询问电子邮件地址。