留言板

Criação de usuário em uma autenticação customizada

Lucas Ferreira,修改在10 年前。

Criação de usuário em uma autenticação customizada

New Member 帖子: 11 加入日期: 14-4-16 最近的帖子
Pessoal ,

Tenho o seguinte cenário.O cadastro dos usuários fica em um sistema externo, e este sistema é que guarda os usuários. Na autenticação do login verifico se o Login e Senha fornecidos na solução Liferay existem no sistema externo , caso exista crio o usuário na base Liferay . Implementei o seguinte código na classe Authenticator para criação do usuário.

final long userId = CounterLocalServiceUtil.increment(User.class.getName());
			final long contactId = CounterLocalServiceUtil.increment(Contact.class.getName());
			objUser = UserLocalServiceUtil.createUser(userId);

			//Insere Contact para um Usuario
			Contact contact = ContactLocalServiceUtil.createContact(contactId);
			contact.setCompanyId(companyId);
			contact.setCreateDate(new Date());
			contact.setUserName(objUsuario.Login());
			contact.setUserId(objUser.getUserId());
			contact.setModifiedDate(new Date());
			contact.setFirstName(objUsuario.Nome());
			contact.setPrefixId(0);
			contact.setSuffixId(0);
			contact.setMale(objUsuario.Sexo());
			contact.setBirthday(objUsuario.DataNascimento());
			ContactLocalServiceUtil.addContact(contact);

			 //Cria Usuario

			objUser.setPasswordUnencrypted(objUsuario.Senha());
			objUser.setPassword(objUsuario.Senha());
			objUser.setContactId(contactId);
			objUser.setScreenName(objUsuario.Login());
			objUser.setEmailAddress(objUsuario.Email());
			objUser.setFirstName(objUsuario.Nome());
			objUser.setCompanyId(companyId);
			objUser.setPasswordModifiedDate(new Date());
			objUser.setCreateDate(new Date());
			objUser.setModifiedDate(new Date());
			objUser.setLanguageId("pt_BR");
			objUser.setTimeZoneId("UTC");
			UserLocalServiceUtil.addUser(objUser);


Verifiquei que o User e o Contact foram criados nas suas respectivas tabelas , mas os campos classNameId,classPk e accountId da tabela Contact_ ficaram com valor 0 e ao final do processo de login do usuário logado recebo o erro abaixo na tela.

Um inesperado erro ocorreu no sistema.

com.liferay.portal.NoSuchGroupException: No Group exists with the key {companyId=10154, classNameId=10005, classPK=101}


Minhas duvidas são como posso gerar o classPk certo para este usuário e gravar na tabela ? Falta algum passo na criação do usuário ?

att,
Lucas
thumbnail
Thiago Leão Moreira,修改在10 年前。

RE: Criação de usuário em uma autenticação customizada

Liferay Legend 帖子: 1449 加入日期: 07-10-10 最近的帖子
Boa noite Lucas, bem vindo a comunidade!

O jeito correto de se criar um usuário é utilizar o método UserLocalServiceUtil.addUser(...) com vários parâmetros. Esse método executa toda a business logic de criação de usuário padrão do Liferay, incluíndo a criação de group, contact, className, assetEntry e assim por diante.

Abraço
Lucas Ferreira,修改在10 年前。

RE: Criação de usuário em uma autenticação customizada

New Member 帖子: 11 加入日期: 14-4-16 最近的帖子
Boa tarde Thiago ,

Fiz um teste utilizando o método UserLocalServiceUtil.addUser() , mas continuo recebendo erro na criação do usuário . Segue abaixo o o trecho do código :

long creatorUserId = CounterLocalServiceUtil.increment();
			long companyId = lgcompanyId;
			boolean autoPassword = false;
			String password1="123456"; 
			String password2="123456"; 
			boolean autoScreenName=false;
			String screenName="lucastesteau2"; 
			String emailAddress="lucastesteau2@mail.com"; 
			long facebookId=0;
			String openId=StringPool.BLANK; 
			Locale locale=Locale.getDefault(); 
			String firstName="lucastesteau2"; 
			String middleName="";
			String lastName="";
			int prefixId=0; 
			int suffixId=0; 
			boolean male=true;
			int birthdayMonth=11; 
			int birthdayDay=12; 
			int birthdayYear=61;
			String jobTitle="Student"; 
			long[] groupIds={0}; 
			long[] organizationIds={0};
			long[] roleIds={0}; 
			long[] userGroupIds={0}; 
			boolean sendEmail=false;
			ServiceContext serviceContext = new ServiceContext();
			
			UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1, password2, autoScreenName,
										screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, prefixId, suffixId, male,
										birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);


Minhas maiores duvidas são a respeito dos campos creatorUserId , groupIds, organizationIds,roleIds,userGroupIds e serviceContext , pois não sei se estou passando os valores corretos .
thumbnail
Thiago Leão Moreira,修改在9 年前。

RE: Criação de usuário em uma autenticação customizada

Liferay Legend 帖子: 1449 加入日期: 07-10-10 最近的帖子
Opa Lucas,

O valor do parâmetro creatorUserId não pode ser zero, ele precisar ser o userId de um usuário que tem permissão para criar outros usuários. O parâmetro ServiceContext precisa ser criado através do método com.liferay.portal.service.ServiceContextFactory.getInstance(...).
Acredito que os outros parâmetros que vocês está passando podem ser zeros.

Abraço