Autenticação

Amigos,

Estou desenvolvendo meu primeiro sistema com o Yii na agencia em que trabalho e para um cliente importante, eu decidi usar o Yii e coloquei o meu na reta com isso. Estou bastante satisfeito com o Yii, me entendi muito com o framework, porém tenho alguns problemas, um deles é com a autenticação.

A aplicação é dividida, tenho a parte que os usuários acessam (tabela usuario) e um módulo administrativo (usei module mesmo) /admin para alguns administradores editarem/moderarem conteúdo (tabela administrador), essas tabelas no banco são separadas por que os dados são bem distintos, preciso fazer autenticação para as duas partes de maneira independente, alguém pode me dar uma luz de como proceder?

Não sei se entendi bem, mas, veja se é isso que vc quer.

http://www.yiiframework.com/forum/index.php?/topic/11051-resolvido-2-dois-login-independente/

É isso mesmo, no entanto não sei como implementar nem um tipo de autenticação que me retorne o usuário do banco de dados com todos seus dados, pois o CUserIdentity não me retorna o usuário da base, quando passo $user->name ele me retorna ‘guest’ ao invés do nome do meu usuário.

PS: Já busquei o usuário da base comparando usuário e senha no actionLogin()

No seu /model/usuario.php cria a seguinte função:




	public static function ListUserPassword() {

    	$users = array();

    	foreach (self::model()->findAll() as $user) {

        	$users[$user->login] = $user->password;

    	}

    	return $users;

	}



E no em /components/UserIdentity.pho deixa assim:




	public function authenticate() {

    	$users = usuario::listUserPassword();


    	if (!isset($users[$this->username]))

        	$this->errorCode = self::ERROR_USERNAME_INVALID;

    	else if ($users[$this->username] !== $this->password)

        	$this->errorCode = self::ERROR_PASSWORD_INVALID;

    	else

        	$this->errorCode = self::ERROR_NONE;

    	return!$this->errorCode;

	}


	public function getId() {

    	return usuario::model()->findByAttributes(array('login' => $this->username))->idusuario;

	}



Com isso você irá logar com usuários de sua tabela.

Amigos,

autenticação implementada, porém tenho 2 duvidas:

Primeiro, como faço para setar um role padrão no meu usuário?

Segundo, é na verdade um problema, quando faço login pelo form o usuário é logado e a variável Yii::app()->user->isGuest é false, pois estou autenticado, no entanto quando clico em qualquer link que de um refresh na pagina Yii::app()->user->isGuest volta a ser false, como se eu tivesse feito logout,

alguém ajuda?

Aguinelo,

Faz um teste, depois de logado aperta F5, se perder a sessão, tudo indica que depois de logar, ele ta matando a sessão.

Veja no seu UserIdentify se você está guardando todas as váriaveis do usuário, até mesmo a sessão.

Perco o LoginForm também, verifica se está passando passo a passo a autenticação.

Já tive problemas no inicio com isso, uma outra coisa.

Nos Controller.php

protected/components/ e protected/components/<seu modulo>/components

Tu deve setar o setStateKeyPrefix() para cada modulo, segue abaixo o link de como deve ser.

http://www.yiiframework.com/forum/index.php?/topic/11051-resolvido-2-dois-login-independente/page__p__54251#entry54251

Problema resolvido amigos, muito obrigado pela ajuda de todos, abraços

Pessoal, não deixe de dizer como resolveu. Isso é muito importânte pra quem tem a mesma dúvida depois.

Ta certo Daniel,

No meu caso eu estava setando o setStateKeyPrefix() junto com o login e isso deve ser setado no controller, como eu tenho um controller base pro admin, setei nele.

A questão do role, como é uma autenticação simples e só tenho perfil de usuário e adm eu setei Yii::app()->user->isAdmin=true; assim testo esta variável pra saber se autorizo ou não acessos e ações.