UserEmailAddressException when calling login() function in Liferay

吃可爱长大的小学妹 提交于 2019-12-11 21:08:54

问题


I want to have LinkedIn authentication in my website. Their API returns the desired information, the create account function is working. However, I seem to have some problems when I try to login on the site.

It seems that I get a UserEmailAddressException when I call the LoginUtil.login method.

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

It fails at

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

Here is my code :

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();
    }

The users authenticate via email address, so I guess that should be the correct authentication type?

I have added company.security.auth.type=emailAddress in portal-ext.properties, but I get the same error as without this setting.

Because Liferay documentation is unsatisfying, I would like to know how to do a proper call to the login() function so that my user will login with its LinkedIn account.


回答1:


It's hard to answer this question from the amount of code that you give.

First of all: About documentation. Judging by the use of LoginUtil, you seem to be modifying Liferay's internal code in order to implement your functionality. This is an internal API that is not guaranteed to be stable and will most likely be documented last (the API documentation has improved a lot, but it's mostly about the external, public API).

You might want to look into the implementation of ServletFilters that Liferay uses for implementing other external single sign on systems. Many customers/users have implemented these successfully (I haven't looked at the state of that documentation though, but there are several SSO implementations that you can find)

Further, it will probably help, which email address is supposed to be invalid - from your code it looks like you're calling with user.getUserId() (this is numeric), but you state that you demanded the login to be through email.

Lastly, if you have configured the login method through the UI, it is saved to the database - and that setting would win. So please check ControlPanel/Portal/Portal Settings/Authentication/"How do users authenticate?" to make sure that the setting is actually asking for the email address.



来源:https://stackoverflow.com/questions/17570204/useremailaddressexception-when-calling-login-function-in-liferay

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!