Tela de Login com Bootstrap e CodeIgniter

UPDATE!

Estão ocorrendo 2 erros que muitos têm me perguntado a causa.

O primeiro é este:

Este é um bug nesta versão do CodeIgniter, 2.2.0. É um erro no retorno do valor de uma variável por referência. A solução é atualizar o CI para a versão 3.+ ou então abrir o código core/Common.php na linha 257 e fazer a seguinte mudança:

A solução ideal é atualizar o CI.

O outro erro é em relação a uma mensagem na tela inicial dizendo que a variável $erro não existe. Eu tenho o costume de trabalhar com a opção short_open_tag habilitada no PHP, o que significa que basta eu digitar isso: <?  ?> em vez disso: <?php ?> pra fazer tudo funcionar. Porém, a opção short_open_tag deve ser habilitada no PHP. Veja isso no php.ini, ou no WAMP, clique no ícone na bandeja, vá em PHP -> PHP Settings e habilite ao opção short_open_tag, então após reiniciar os servidor, seu código irá funcionar.

———————-

Olá.

No post de hoje vamos aprender a como integrar aquela tela de login que existe no exemplo no site do Bootrap no CodeIgniter, fazendo um sistema simples de autenticação.

Como a intenção aqui é apenas mostrar como podemos fazer um sistema de login bem interessante no CodeIgniter e também mostrar como utilizar aquela bela tela de login do Bootstrap, não iremos utilizar Banco de Dados.

O usuário/senha serão hardcode e também após o usuário conseguir logar-se, será apresentado apenas uma página com um texto informando o sucesso do login.

Para começar, vamos utilizar de uma funcionalidade que a Orientação à Objetos nos fornece para que possamos criar este projeto.

Vamos lançar mão da herança na orientação à objetos, onde nós conseguimos herdar as propriedades, métodos, etc da classe pai.

Para ser mais específico, o que nós vamos fazer pedir ao CodeIgniter para que todos os controllers que iremos proteger, estendam o controller chamado MY_Controller, que é onde iremos colocar o código de verificação de login do usuário.

Dentro do controller MY_Controller, na função __construct(), que é chamada sempre que uma classe é construída, nós vamos consultar uma variável na sessão para saber se o usuário passou pela tela de login.

Caso o valor desta variável seja igual a 1, então nada é feito e o fluxo continua, porém, caso o valor seja diferente de 1, indica então que o usuário não está logado, e assim nós redirecionamos ele novamente para a tela de login.

O legal aqui é que nós não vamos precisar especificar a tela de login quando precisarmos redirecionar o usuário.

Nós vamos simplesmente redirecioná-lo para a url base do sistema, pois como o CodeIgniter está configurado, neste caso, para que ele chame o controller home automaticamente que é o controller principal, e como este controller estende o MY_Controller, então, por mais que nós chamemos a URL base, se o usuário não estiver logado, ele vai ser redirecionado para a tela de login.

Se você se perdeu no texto acima, não se preocupe, logo mais você entenderá.

Vamos então começar a construir nosso sistema de login.

O primeiro passo é configurarmos o CodeIgniter para carregar automaticamente a biblioteca session e o helper url

Para isto, abra o arquivo application/config/autoload.php e na linha 55, que onde você informa quais bibliotecas deseja carregar, digite dentro da array a string session ficando assim:

Na linha, 67, deixe assim:

O helper url nos traz função relacionadas à url do sistema.

Feito isso, agora você precisa configurar uma chave secreta para que a biblioteca session seja utilizada. Para isto abra o arquivo config.php que também está neste mesmo diretório.

Desça até a linha 227 e configure uma chave de criptografia. Veja meu exemplo abaixo:

Você pode colocar qualquer texto aí.

Agora vamos informar ao CodeIgniter para carregar como padrão nosso controller home. Para isto, abra o aquivo routes.php também dentro desta mesma pasta, e vá até o final do arquivo.

A linha 41 informa ao CodeIgniter que o controller padrão que será carregado, caso nenhum seja informado, é o welcome. Mude para home que será agora o controller principal.

Muito bem, feito isso, vamos agora criar o controller que será o responsável pela verificação do login do usuário.

Vamos criar um controller chamado MY_Controller e colocá-lo dentro da pasta application/core/ com o seguinte conteúdo:

O caminho para este controller ficará assim: application/core/MY_Controller.php

Agora, dentro da pasta application/controllers modifique o controller welcome.php para home.php lembrando de alterar também o nome da classe dentro deste arquivo, alterando de Welcome para Home e mude também a classe pai, que originalmente está como CI_Controller para MY_Controller.

Aqui que está o pulo do gato. 

Todo controller que você quiser proteger, terá que estender o controller MY_Controller, pois é dentro deste que está o código de verificação do login do usuário.

Abaixo veja como ficou o código do controller home.php:

Este controller basicamente só chama a view v_home, que traz a mensagem de sucesso quando o usuário estiver logado.

Vamos criar agora outro controller dentro desta pasta, chamado login.phpEste controller será responsável pelas funções relacionadas ao login do usuario.

Ele terá 3 funções dentro.

A primeira função index() simplesmente carrega a view login. Veja abaixo:

A função logar() é para onde o action do formulário de login deverá apontar. Aqui nós fazemos a comparação do usuário/senha digitados com os gravados.

Neste exemplo o usuário/senha estão hardcode. Mas você fará a modificação para um banco de dados, caso necessite.

Veja abaixo o código:

E a última função é a logout() onde eu simplesmente destruo a variável logado que é responsável por indicar se o usuário está ou não logado no sistema. Veja:

Atenção!

Algo muito importante. O controller login.php não pode estender a classe MY_Controllerpois não há sentido em queremos proteger a tela de login.

Caso você estenda a classe MY_Controller, o navegador irá entrar em loop.

Este controller deve estender normalmente o controller CI_Controller do CodeIgniter.

Veja abaixo o código completo do controller login.php:

A parte de controllers termina aqui. Agora vamos criar as viewes login  home.

A view login é a tela de login que vamos utilizar lá do Bootstrap.

Originalmente o exemplo do bootstrap tem uma checkbox para relembrar o login. Como esta é uma etapa um pouco mais complexa, não vou abordar aqui, por isso removi este input do formulário.

Veja abaixo como ficou o código completo da view v_login.php:

A outra view é a v_home.php. Esta seria a view principal do seu sistema que é protegido.

O usuário só vai conseguir ver esta view, se conseguir passar com sucesso pela tela de login.

Aqui eu só coloquei uma mensagem de sucesso e um link para o usuário deslogar. Veja:

Bom, é isto. O sistema de login termina aqui.

Abaixo segue este sistema funcionando para você testar. Os dados de acesso são:

Usuário: usuario@email.com.br

Senha: 123456

Link para testar o sistema.

Para você baixar o código fonte completo do exemplo, clique no link abaixo:

Baixar o Código Fonte do Exemplo

 

vejanoyoutube

 

Um grande abraço e até o próximo post.

Fábio.

Fábio S. Reszko

Sou Programador PHP desde 2006 e eu acredito sinceramente que programar usando um Framework PHP é a solução para os problemas de códigos desorganizados, difíceis de entender e de dar manutenção no futuro. Se você também acredita nisto, então fique à vontade em explorar meu blog.

  • valdiney

    Olá Fabio, gostei bastante da sua postagem, sempre bem direta e explicativa. Fiz do jeitinho que voc~e mostrou e localmente funciona perfeitamente, porem quando tempo colocar a aplicação em um servidor web é me apresentado um erro dizendo que a Class ‘MY_Controller não foi encontrada no controller home.
    Ele me da um erro da linha 3 que é justamente onde eu inicio a minha class controller estendendo a Class MY_Controller.

    Como voc~e mandou acima guardei a Class ‘MY_Controller dentro de application/core.

  • Olá Valdiney,

    Eu também tive este problema uma vez, funcionava localmente mas ao subir ao servidor, ele não encontrava o MY_Controller. A solução foi que localmente eu estava usando xampp com Windows, e no meu servidor remoto era Linux. O problema era só em relação à maiúsculas e minúsculas. Como o Linux é Case Sensitive, então eu tinha criado o MY_Controller assim mas ao chamá-lo, eu estava digitando assim: MY_controller.

    Veja se é isso o problema. O nome da classe deve ser igual ao nome do arquivo.

    Abraços

    Fabio

  • Fabio, muito obrigado cara, já estava ficando desanimado, você foi no erro certinho. Fiz como disse e deu tudo certo. Muito obrigado mesmo, pela sua grande contribuição. Tenho olhando bastante na internet e os seus tutoriais são de muito boa qualidade. Força ai na batalha. Valeu!

  • Olá Valdiney. Fico feliz que deu certo.

    Já viu meu vídeo sobre introdução ao MVC? Caso já conheça MVC, indique para algum amigo programador iniciante que deseja aprender a programar MVC.
    O endereço é: http://www.phpexpert.com.br

    Abraços
    Fabio

  • Cristhian

    Fabio adorei seu blog, muito bom muito, bom mesmo, tudo muito bem explicado, parabéns.

  • Olá Cristhian

    Obrigado. Fico feliz que meu blog esteja sendo útil.

    Abraços
    Fabio

  • Parabéns pelo Post,
    Você fez uso do Bootstrap via CDN, seria interessante mostrar o acesso do bootstrap diretamente no arquivo.

  • Olá João

    Eu resolvi não focar tanto nisso pois já tinha falado sobre a inclusão dos arquivos do Bootstrap neste post, mas de qualquer modo sua dica é válida.

    Nos próximos posts vou fazer o texto mais completo.

    Abraços
    Fabio

  • Eulen Mesquita

    Fábio, parabéns pelo artigo simples e completo. Comecei a estudar agora o CodeIgniter. Estava tentando encontrar uma solução pra exigir autenticação apenas em algumas áreas do sistema e você veio com a solução mais elegante possível, estender um controller que exija login quando necessário ao invés do CI_Controller. Muito obrigado por compartilhar.

  • Olá Eulen,

    Obrigado.

    Abraços
    Fábio

  • Ótimo artigo Fábio, parabéns. Agora você teria algum outro artigo mostrando como trabalhar com models no codeigniters?

  • Ronald, não sei se já viu este post: http://www.dicascodeigniter.com.br/mvc-na-pratica-entenda-de-uma-vez-por-todas-como-isso-funciona/, ele tem até um vídeo onde eu explico detalhadamente com trabalhar com MVC, o que inclui os Models.

    Fabio

  • Legal Fábio, irei dar uma olhada. 🙂

  • victor

    Mas ao estender do MY_Controler, eu não perco as funções do CI_Controler ?

  • Olá Victor

    O Controller MY_Controller estende o CI_Controller, então, por causa da herança da orientação a objetos, todas as funções do CI_Controller ficam disponíveis para quem estende o MY_Controller.

    Se estiver um pouco confuso sobre isto, dê uma estuda em herança na orientação a objetos em PHP.

    Abraços
    Fábio

  • Boa noite Fábio.

    Parabéns pelo post, muito claro e didático.

    Utilizei seu método de autenticação em um trabalho novo aqui na empresa, mas ao publicar para teste, surgiu um problema de sessão que não estou conseguindo resolver. Já tentei várias soluções que encontrei na net e também na documentação do codeigniter.

    Se tu quiser dar uma olhada: http://www.drsistemas.net/drnetsocial

    Obrigado!

  • Olá Fábio

    É importantíssimo que você acrescente esta linha no seu controller MY_Controller

    parent::__construct();

    exatamente como eu mostro no exemplo.

    Você está fazendo isto?

    Caso o erro persista, poste o código do MY_Controller para eu verificar.

    Fabio

  • Obrigado pela resposta.

    Quanto ao MY_Controller está exatamente como no post. Estou chamando a library “session” no autoload e mantenho a estrutura semelhante ao seu exemplo. O que faço de diferente é recuperar uma variável de sessão com o nome do usuario logado que exibo na página index que é chamado quando o login ocorre com sucesso.

    Se você acessar drsistemas.net/drnetsocial/login e colocar qualquer usuário e senha vai perceber que retorna a mensagem de Usuário e Senha inválido.

    Se você colocar o usuário drnetsocial@drsistemas.net e a senha 123456 verá que o sistema apresenta o erro de sessão.

    Obrigado pela atenção.

  • Código do MY_Controller:

    session->userdata(“logado”);

    if ($logado != 1)
    redirect(base_url(‘index.php/login’));
    }
    }

  • A sua linha que recupera o session está errada. O correto é:

    $this->session->userdata('logado');

    Fabio

  • Boa tarde Fábio.

    Na verdade o controle MY_Controller está exatamente como no post, o que ocorreu foi um erro no copiar e colar. Seu post ajudou bastante, porém, resolvi seguir outro caminho para autenticação de usuários e segurança de acesso.

    Não sei se posso compartilhar aqui no seu blog, se não puder tranca na moderação. Segue link:
    http://imasters.com.br/artigo/18327/codeigniter/criando-uma-biblioteca-para-controle-de-acesso-por-usuario-com-codeigniter/

    Obrigado e parabéns pelo blog.

    Alessandro

  • Olá Alessandro

    Estranho não ter funcionado no seu caso. Geralmente estes erros ocorrem porque a classe não está estendendo o CI_Controller, mas só colocando a mão no código mesmo pra descobrir o problema.

    No caso do link que você sugeriu, eu dei uma olhada e apesar de ser uma solução mais completa, ela é bem antiga e existem vários erros de design MVC ali, como por exemplo um echo dentro de um controller, inclusive nos próprios comentários do post o autor menciona isto, mas se for usar para somente se ter uma ideia, não há problemas.

    Abraços
    Fábio

  • Obrigado por compartilhar. Ótimo projeto.

  • Vital

    Excelente tutorial.
    Mas tenho uma dúvida: Nesse exemplo, após uma tentativa frustada de se autenticar, quando o usuário loga no sistema e depois clica em deslogar, ele está sendo redirecionado para a tela de login e a mensagem de $erro ainda permanece na página.
    Qual a sugestão que você da para que a variável $erro seja “limpa” após a autenticação ter sido realizada com sucesso?

    Obrigado desde já.

  • Olá Vital

    Fiz como você mencionou e o erro não aparece no exemplo que está funcionando on-line. Note que dentro da view v_login.php antes de eu imprimir o conteúdo da variável $erro na tela, eu verifico se a mesma existe através da função isset(). Isto porque quando você clica em Deslogar, você é redirecionado para o controller Home, que neste caso através do controller MY_Controller ele verifica que você não está mais logado e então chama o controller Login, e no método index deste controller é chamada a view v_login. Repare que neste momento a variável $erro não é criada e nada devido a isso é repassado à view, ou seja, a variável $erro não vai existir lá por isso não será impressa, já que a função isset($erro) irá retornar false.

    Não sei se este erro que você mencionou está ocorrendo no meu exemplo online ou se está ocorrendo na versão que você mesmo criou, mas repare nas dicas que dei acima e veja se estão de acordo.

    Caso ainda haja algum problema, faça um novo comentário.

    Abraços
    Fábio

  • Reinaldo Gomes

    Muito bom esse post juntamente com o todo conteúdo do site, está me ajudando muito com o CodeIgniter. Parabéns e obrigado por compartilhar seu conhecimento conosco.

  • Valeu Reinaldo.

  • Jander

    Meu Amigo quero primeiro parabeniza-lo por sua iniciativa de repassar conhecimento.
    Vamos lá,segui todos os passos de sua aula,porém não consigo de maneira nenhuma passa para tela de logado erro 404 cópie os arquivos,baixei e mesmo assim não tenho obtido sucesso você poderia me ajudar quero ir adiante mais preciso passar por este desafio,obrigado.

  • Olá Jander

    Não entendi muito bem sua pergunta. Acredito que você queira dizer que quando redireciona o usuário para a tela de logado, recebe o erro 404, seria isto?

    A ideia do projeto é que todas as telas, com exceção do login, sejam protegidas, então se o usuário não estiver logado e ele tentar acessar qualquer uma das páginas, será redirecionado para a tela de login.
    Uma vez que ele tenha conseguido logar, então eu redireciono ele para a URL base, que é seria o ‘início’ do site. Se está dando erro 404 nesta parte, verifique se o default controller que fica em config/routes.php está configurado para “home”.

    Baixei o arquivo de exemplo do site e testei aqui localhost e funcionou.

    Caso o erro persista, entre mande um novo comentário.

    Fabio

  • Ricardo Ferreira

    Olá Fabio,

    Gostei muito do tutorial porém como eu faço para proteger uma página? Eu quero que só acessem aquela página quando a session estiver ativa ou seja com usuário logado e quando não logado redireciona para o login

    Abraços

  • Olá Ricardo

    Veja que no post eu menciono que para proteger uma página qualquer, basta você fazer com que o Controller que cuida da sua página estenda o MY_Controller, e assim ela estará protegida automaticamente.

    Fábio

  • joao saraiva

    Bom dia, Fabio.
    eu estou tentando usar o set_flashdata para exibir uma mensagem quando fizer logout mas não exibir.
    login.php:

    public function logout(){
    $this->session->set_flashdata(‘logoff’, ‘deslogado com sucesso’);
    $this->session->unset_userdata(“logado”);
    redirect(base_url());
    }

    v_login.php:

    session->flashdata(‘logoff’); ?>

  • Olá João

    O conteúdo da flashdata fica disponível somente para a próxima requisição. No seu código você está definindo ela e em seguida fazendo um redirect. Provavelmente neste redirect é feita uma nova requisição e então já não é mais possível utilizar o conteúdo de flashdata. Você pode tentar usar uma session normal e depois que exibir a mensagem apagá-la manualmente.

    Abraços
    Fabio

  • Ricardo Ferreira

    Olá pessoal,

    Mais alguém teve problemas com o session Start()?

    http://www.gruporsf.com.br/codeigniter3/

    Já cassei tudo que foi erro e nada

    🙁

    Se alguém conseguir resolver posta aqui a solução

  • Ricardo, você está digitando a função session_start() no código? Caso sim, devo lembrar que não precisa fazer isto. Ao carregar a biblioteca session o CodeIgniter já inicializa a sessão automaticamente, sem a necessidade de se digitar session_start()

    Fabio

  • Ricardo Ferreira

    Olá Fabio, tudo bem?

    Não estou chamando a função session start()

    defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);

    class MY_Controller extends CI_Controller {

    public function __construct(){

    parent::__construct();

    if(!isset($this->session->userdata(“logado”)) || $this->session->userdata[“logado”] != true){
    redirect(base_url(‘login’));
    }
    }
    }

  • Ricardo, o erro

  • headers already sent by
  • ocorre porque qualquer tipo de texto, até mesmo espaço em branco foi enviado antes que a sessão fosse iniciada. No erro é dito que estes textos ou espaços em branco estão no arquivo MY_controller.php na linha 1, tente deletar tudo o que existe ali antes da classe.
    Eu baixei o sistema de login novamente do site e testei na minha máquina e tudo funcionou.
    Não sei se você fez alguma modificação no código original, mas caso tenha feito. provavelmente existe alguma saída de texto antes da sessão ser iniciada.
    Em alguns casos nem conseguimos ver que algum texto está sendo enviado ao navegador, mesmo abrindo no editor de texto.
    Se tudo estiver aparentemente correto, sugiro fazer assim: abra o arquivo MY_controller.php no notepad++ e no menu Formatar escolha: Codificação UTF-8 (SEM BOM). Salve o arquivo e envie novamente ao seu servidor.
    Talvez você tenha que fazer isso para mais de um arquivo se desconfiar que o erro não esteja somente em MY_Controller.php

    Fabio

  • Ricardo Ferreira

    Muito obrigado Fabio, deu certo fazendo pelo notepad++

    Novamente obrigado e parabéns pelo blog está show de bola e vem me ajudando bastante nos estudos

    Abraços

  • Renan Arrieiro

    Parabéns pelo blog, e sua iniciativa.
    Estou seguindo seu post, para fazer a autenticação. mas no formulário estou fazendo com helper form, até ai beleza, estou enviando para login/enviar, enviar sendo o método que autentica o usuário, mas quando da erro eu redireciono para:

    $dados[‘erro’] = ‘Texto do erro’;
    $this->load->view(‘login_v’,$dados);

    testei se esta entrando no else da autenticação, e se esta pegando os dados certo, tudo OK.
    quando retorna caso haja erro, meu link fica: site/login/enviar.
    e aparece erro:
    Fatal error: Call to undefined function form_open() in …\sisalta\application\views\login_v.php on line 35
    como se não tivesse passado pelo controlador e não tivesse carregado o helper que declaro no controlador.

    help me pls =)

  • Olá Renan

    Provavelmente você está carregando o helper form somente no formulário que funciona, e no controller que mostra a view de erro você não está carregando este helper antes de chamar a view.
    Se for este o problema, você pode resolvê-lo de duas maneiras: ir no método que chama a sua view que mostra o erro e acrescentar o load que carrega o helper form, ou uma segunda maneira é ir abrir o arquivo autoload.php que fica na pasta config e acrescentar o carregamento automático deste helper, assim não vai ter este problema.

    Espero ter ajudado.

    Abraços
    Fábio

  • Walney Moreira Klein

    Obrigado pelo post estou necessitando criar um sistema de login, para proteger o site, e ter niveis para area de usuarios e para administrador, sou novo no codeigniter, como faço para trazer os dados e verificar do banco de dados, jah tenho a tabela de usuario e tambem setada as configurações do server MySQL mais nao sei como fazer estas pesquisas e consulta, poderia me ensinar ou indicar onde obter mais informaçoes sobre, obrigado.

  • Rafael Gonçalves

    Parabéns pelo blog, e obrigado por me apresentar ao CI, estou descobrindo algo incrível.

    Gostaria de saber como recuperar o nome do usuário que esta logado e apresentar nas paginas que possem a proteção.

  • Rafael, basta você atribuir as informações que você deseja na hora do login usando a sessão. Exemplo: para salvar o email do usuário em sessão: $this->session->set_userdata(“email”, “email@usuario.com”); Para recuperar em qualquer lugar da aplicação, faça assim: $email = $this->session->userdata(“email”); Pode fazer isso pra qualquer informação que desejar. Abraços.

  • Diego G.

    Cara o MY_Controller nao encontra o caminho index.php/login,tenho um controller login e dentro tenho class Login extends CI_Controller {

    public function index()
    {
    $this->load->view(‘login’);
    }

    Mas sempre recebo o erro 404 Not Found

  • Olá Diego.

    Lembre-se que o controller Login não estende o controler MY_Controller, se não entra em loop. Mas em relação ao erro, veja se não existe algum erro básico de nome de arquivo, nome da classe etc. Fica difícil eu dar uma ajuda daqui só com estas informações.
    Abraços
    Fabio

  • “O controller login.php não pode estender a classe MY_Controller,”

    Valeu mano, eu tinha feito parecido, mas já estava frustrado, pois estava sempre redirecionando,
    mas não estava enxergando isso, achei a solução nesse pequeno detalhe.

    Vlw man!

  • Diego G.

    fiz rodar o login mas na index do login esse erro aparece.
    Obg pelo tutorial foi bem util.

  • Rodrigo Gimenez

    Ola Fábio, fui usar seu exemplo com o CodeIgniter 3.1.0 e não funcionava de jeito nenhum, percebi que o problema era com a instrução:

    redirect(base_url(‘index.php/login’));

    no arquivo MY_Controller.php. Baixei o seu fonte e funciona perfeitamente, comecei a comparar os arquivos alterados e não havia nada de diferente, logo, imaginei que o problema seria com o Framework em si.

    Foi substituindo arquivo por arquivo da versão (3.1.0) que estava usando pelos arquivos da versão que você usou até que achei o “problema”, quando subistitui o arquivo “CodeIgniter-3.1.0systemcoreHooks.php” funcionou, ou seja, só funciona no CodeInteger 3.1.0 com esse arquivo da verão que você usou.

    Você sabe me dizer o por que?

    Obrigado.

  • Olá Rodrigo

    Estranho, neste exemplo eu não uso os Hooks. Então ele não deveria influenciar no funcionamento.

    De qualquer modo, pode haver incompatibilidades mesmo entre versões diferentes. A versão usada no post é a 2.2.0.

    Agradeço sua dica sobre a atualização.

    Abraços
    Fabio

  • Rodrigo Gimenez

    Entendi, mas teria como vc testar esse mesmo fonte na versão 3.1.0? Gostaria de saber se tenho que usar outra coisa no lugar de “redirect(base_url(‘index.php/login’));”. Se eu usar “$this->load->view(‘v_login’);” funciona, mas acredito que não seja correto.

    Obrigado.

  • douglas88

    Pra que serve isso : if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

  • Isto basicamente serve para evitar que um usuário acesse diretamente a classe. Caso tente fazer isto, aparece o erro: no direct script access allowed,

    O CI verifica isso através da constante BASEPATH, que só é criada quando o usuário passa pelo index.php.

    É uma medida de segurança.

    Abraços
    Fabio

  • Ficou bom, mas faltou colocar a opção de recuperar a senha por e-mail, ficaria melhor ainda, quem quiser um script mais completo pode testar este: http://bit.ly/PHPdoZeroDownload

  • E. B.

    Fabio, muito bom o post!..

    Apenas percebi dois ajustes..
    O primeiro, é que no MY_Controller gravei na session o current_url da biblioteca URL, e assim, após login do usuário direiciono ele para URL.. Assim, se passar um link para ele, que exige permissao, ele irá logar e depois ser transferido para a URL que havia solicitado anteriormente…
    O segundo, é que se o usuario já estiver logado e acessar o controller do Login, ele solicita novamente o login (vai exibir a tela de login, mesmo estando logado)… apenas fiz um IF se o usuario já estiver logado, redirecionada ele para a pagina inicial.

  • Olá.

    Legal sua alteração do current_url, porém, em relação a problema de verificar se o usuário já está logado, isto já está previso no próprio MY_controller. Já existe um IF lá onde verifico a variável $logado. Deveria estar funcionando. 🙂

    Abraços

  • E. B.

    Oi Fábio,
    Sim perfeito, está funcionando perfeitamente. Volto a frisar que ficou objetivo e simples desta forma,. ou seja, muito bom.
    No que me refiro ao login, é no caso:
    Acessei o Home, como ele herda de MY_Controller ele redireciona para Login, pois ainda não estou logado.
    Se acessar novamente o Home, ele mantem no Home, afinal pelo IF no MY_Controller ele verifica login, e como já realizei fica correto.

    Agora se após fazer login, voltar a acessar o login, seja acessando pela URL ou utilizando o “Voltar” dos navegadores, eu retorno a Classe Login que herda de CI_Controller, não passando como você mesmo falou no MY_Controller pelo motivo do Loop, como não existe nela validação de login, ele simplismente abre a tela de login novamente. Mas perai, eu já estou logado?
    Neste caso fiz uma verifição: Se já está logado redireciona para Home.
    Ou seja, se por engano, o usuario “Voltou” ao Login, e já está logado, ele redireciona ele para Home.

  • Brunna Martins

    Eu instalei no meu domínio. Mas ele troca o nome do domínio pelo ip. ex: (http://meudominio.com/codeigniter) para (xxx.xxx.xxx/codeigniter/) e não funciona porque o meu site não acessa pelo ip. Como eu mudo isto? Poderiam me ajudar, por favor?

  • Regis Oliveira

    Fala Fábio!!!
    Excelente post, muito bom mesmo, eu que comecei ontem no php to entendendo..rs

    Mas to com um problema que não consigo resolver:

    A PHP Error was encountered

    Severity: Notice

    Message: Undefined variable: erro

    Filename: views/v_login.php

    Line Number: 35

    Backtrace:

    File: E:wwwcodeigniter2applicationviewsv_login.php
    Line: 35
    Function: _error_handler

    File: E:wwwcodeigniter2applicationcontrollersLogin.php
    Line: 7
    Function: view

    File: E:wwwcodeigniter2index.php
    Line: 315
    Function: require_once

    Esse código aparece sempre quando vou pra página de login.
    O que pode estar errado no meu código?

    Eu copiei e colei o seu, está exatamente igual.

    Abraços!!

  • Olá Regis.

    A solução para este erro está explicada no início do post.

    Fabio

  • Regis Oliveira

    Opa!!

    Valeu Fabio, não tinha visto!!
    Só que mesmo fazendo o que pediu não arrumou, fiz uma alteração aqui e já consegui arrumar.
    De qualquer forma agradeço.

    Abraço!