0

我想在我的网站上进行 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();
    }

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

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

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

4

1 回答 1

1

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

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

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

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

最后,如果您已经通过 UI 配置了登录方法,它会保存到数据库中 - 并且该设置会胜出。所以请检查控制面板/门户/门户设置/身份验证/“用户如何进行身份验证?” 以确保该设置实际上是在询问电子邮件地址。

于 2013-07-10T13:25:50.350 回答