我想在我的网站上进行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帐户登录。
答案 0 :(得分:1)
很难从你提供的代码量中回答这个问题。
首先:关于文档。通过使用LoginUtil来判断,您似乎正在修改Liferay的内部代码以实现您的功能。这是一个内部API,不能保证稳定,最有可能最后记录(API文档已经改进很多,但主要是关于外部公共API)。
您可能希望研究Liferay用于实现其他外部单点登录系统的ServletFilter的实现。许多客户/用户已经成功实现了这些(我没有查看过该文档的状态,但是您可以找到几种SSO实现)
此外,它可能有帮助,哪个电子邮件地址应该是无效的 - 从你的代码看起来你正在使用user.getUserId()
(这是数字),但你声明你要求登录到通过电子邮件。
最后,如果您已通过UI配置了登录方法,则会将其保存到数据库中 - 该设置将获胜。所以请检查ControlPanel / Portal / Portal设置/身份验证/“用户如何进行身份验证?”确保该设置实际上是在询问电子邮件地址。