12
respostas

Separando o Front e Back End

Estou criando um sistema de cadastro onde ao se registrar, um usuariofaz login e tem acesso aos seus dados.. e preciso criar um back end pra que eu possa fazer a gerencia desses cadastros.. como que funciona? ja que tenho login no front e no back end? meu front esta praticamente completo.

12 respostas

Dá uma pesquisada sobre jwt ou oauth... vc precisa, em cada requisição, trafegar um token indicando os dados do usuário logado.

Esse backend vai precisar ter acesso, de alguma forma, ao lugar onde ficam os dados dos usuários.

vai precisar sim.. eu sou meio novo na programação.. o que ojwt ou oauth fazem mesmo? o back end vai precisar acessar os dados dos usuarios sim..

o login no front ja esta funcionando o esquema de login padrao do cake usando a tabela users... so que preciso colocar um login para administrador que sera o meu /admin

Oi Janai, tudo bem?

Pelo o que eu entendi você ja conseguiu fazer o login comum para usuarios, certo? O que falta é fazer o login para admin?

Você pode criar uma rota diferente para admin "/admin/login" e realizar a verificação da mesma forma que fez com o usuario comum =)

Entretanto, dessa vez você vai precisar verificar no seu banco se o admin existe, ao inves do usuario comum, seguindo a forma com que você modelou seu projeto.

Qualquer dificuldade compartilha aqui com a gente.

Abraço.

a minha dificuldade esta em que eu ja coloquei a tabela users pras pessoas que se cadastrarão no meu sistema.. agora precisaria criar uma tabela so para administradores do sistema.. que terao acesso ao /admin como que ficaria essa autenticacao ja que usei o padrao que é tabela users como os campos username e passoword.

criei uma nova rota:

$routes->connect('/admin/', ['controller' => 'Admin', 'action' => 'index']);

Como defino um layout para o meu admin.. ele esta pegando o padrao do front.

outro detalhe como ja havia falado.. pelo fato de ja estar utilizando o login no front ele tbem bloqueou o acesso ao /admin tive que permitir o acesso no meu AdminController isso pra visualizar:

public function beforeFilter(Event $event){
        parent::beforeFilter($event);
        $this->Auth->allow(['index']);


    }

Continuando ainda a minha duvida de como vai trabalhar o login... no admin sendo que o login do front ja esta amarrando a aplicação toda..

Posso dar uma olhada no seu AdminController e na View?

Assim fica mais facil te direcionar =)

Aguardo retorno!

Abraço.

meu UsersController (Front-End):

<?php

namespace App\Controller;
use Cake\ORM\TableRegistry;
use Cake\ORM\Entity;
use Cake\Event\Event;

class UsersController extends AppController{

    public function beforeFilter(Event $event){
        parent::beforeFilter($event);
        $this->Auth->allow(['index','cadastrar']);


    }


    public function index(){

        $usersTable = TableRegistry::get('Users');
        $user = $usersTable->newEntity();
        $this->set('user',$user);

    }

    public function cadastrar(){

        $usersTable = TableRegistry::get('Users');
        $user = $usersTable->newEntity($this->request->data());

        if($usersTable->save($user)){
                $msg = 'Cadastro feito com sucesso! Faça o login para realizar suas inscrições.';
                echo $this->Flash->set($msg,['element'=>'success']);
            }
            else{
                $msg = 'Erro Fatal 101!Entre em contato com o administrador do sistema para a sulução deste problema.';
                echo $this->Flash->set($msg,['element'=>'error']);
            }

            $this->redirect('/users/index');

    }



     public function editar() {

        $codigo = $this->Auth->user('codigo');
        $usersTable = TableRegistry::get('Users');
        $user = $usersTable->get($codigo);
        $this->set('user',$user);
        $this->render('index');

    }

    public function editarUser() {


    }

    public function login(){

        if($this->request->is('post')){

            $user = $this->Auth->identify();

                if($user){
                    $this->Auth->setUser($user);
                    return $this->redirect($this->Auth->redirectUrl());
                }else {
                    $msg = "Usuário ou Senha inválidos! Tente novamente.";
                     echo $this->Flash->set($msg,['element'=>'error']);
                     $this->redirect('/users/index');
                }

        } else {
                     $msg = "Acesso Restrito! É necessário login para acessar esta informação. Você pode cadastrar-se preenchendo os campos abaixo.";
                     echo $this->Flash->set($msg,['element'=>'error']);
                     $this->redirect('/users/index');
        }



    }

    public function logout(){

        $this->redirect($this->Auth->logout());

    }




}

AdminController (BackEnd):

<?php

namespace App\Controller;
use Cake\Event\Event;

class AdminController extends AppController{

    public function beforeFilter(Event $event){
        parent::beforeFilter($event);
        $this->Auth->allow(['index']);
        $this->viewBuilder()->layout('admin');

    }

    public function index(){

    }
}

Legal, agora com o AdminController você pode criar um método Login pra validar seu admin. Seria necessario também criar uma tabela admin no seu banco, e verificar se seu admin está no banco.

Além dessa possibilidade das rotas, você também pode usar autenticação e autorização. É uma solução um pouco mais complexa mas muito mais bonita. Você pode encontar um tutorial passo-a-passo sobre isso no proprio blog da cake =)

https://book.cakephp.org/2.0/pt/tutorials-and-examples/blog-auth-example/auth.html

Espero ter ajudado =)

Bons estudos!

Amigo esse esquema de colocar uma tabela com o nome users campos username e passoword eu ja estou usando no front.. vou precisar de fazer uma tabela nova.. nao tem como ter 2 tabelas users no banco... por isso nao consigo saber como separar o front do back end.. ate agora parce que ninguem entendeu minha duvida.... postei meu controller ai em cima mostrando que ja fiz um login do front ele esta ok.. mas como coloco outra tabela pra autenticar os administradores..

vou ter login no meu front e no back end e preciso saber como autenticar quando for fazer o login do admin ja estou usando a tabela users...

Alguem por favor pode me ajudar?

Quando eu utilizo a autenticação com ele amarra a minha aplicação toda e dai eu vou liiberando as páginas publicas das restritas.. não seria o caso de colocar niveis de permissão ou usar uma pasta de cake com a aplicação para front e outra pasta com o cake (/admin) para o backend? pq como ele amarra a aplicação inteira nao sei se consigo autenticar o admin em uma tabela diferente da users