Crie um script de login seguro no PHP | John Morris | Skillshare
Menu
Pesquisar

Velocidade de reprodução


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Crie um script de login seguro no PHP

teacher avatar John Morris, I help freelancers get clients.

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Boas-vindas e introdução

      2:16

    • 2.

      Crie um login de banco de de de banco de de de e em

      25:17

    • 3.

      Crie um site de a base de a base de a que

      29:18

    • 4.

      Adicione um recurso de lembrete

      24:50

    • 5.

      Crie uma revisão de senha segura

      45:32

    • 6.

      Próximos passos

      1:16

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

1.184

Estudantes

1

Projetos

Sobre este curso

Você vai aprender como criar um sistema de login de login de sessão de sessão de a sessão de a sessão em a sede em PHP. Há duas versões: 1: uma versão não de banco de Em seguida) vamos converter isso em o de acesso de acesso de dados de completa para a base de dados para a sua de de de dados:

  • Acesso de usuário em a sessão
  • Registro de usuários
  • Lembre-se de me
  • Redefinição de senha em e-mail
  • Tokens de a criação de páginas de segurança
  • Prevenção de injeção de SQL
  • Instale o script

E muito mais.

FAIR de de FAIR

Este é um curso avançado. Os tópicos de abordados em aqui em a em a parte de seus conhecimentos do PHP. É apenas uma pequena percentagem de de desenvolvedores do mundo que sabem como fazer isso corretamente. Recomendo de meu curso do PHP 101, antes de fazer este curso. Apenas se a entrar no que você está pronto para se desafiar e fazer suas habilidades do PHP para uma

Vem com o código de fonte completo na seção o projeto do curso.

Conheça seu professor

Teacher Profile Image

John Morris

I help freelancers get clients.

Professor

Click here to start this class

Visualizar o perfil completo

Level: Advanced

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Boas-vindas e introdução: Olá, John Morris aqui, John Morris online ponto com. Então eu quero ser muito rápido o que você vai aprender neste curso, Então você vai aprender a construir um eu diria um script de login bastante avançado. Então este script de login, claro, é executado por sessões. Você vai ver que tem um recurso lembrar me aqui totalmente funcionando. Lembra-te da minha característica. Então, se alguém verificar isso e fechar seu navegador e voltar, ele vai se lembrar deles e eles ainda estarão logados, mesmo que, porque estamos usando sessões fechando o navegador destrói as sessões. Usamos cookies para ajudar a fazer com que eles se conectem novamente. Lembra-se deles? Pode-se ver aqui. Tem um registro vai falar sobre. Há maneiras fáceis, dedo do pé, adicionar campos e assim por diante. Temos redefinição de senha junto com ele para que você possa ter ah, senha enviada por e-mail. Mande-os reiniciar. Então é um script de log in bastante funcional, e nós vamos analisar tipo de como resolver isso, todo o código protegendo todas essas coisas porque começamos a falar sobre recurso Lembrar de mim e um recurso de redefinição de senha. Essas coisas são muito sensíveis em termos de poder protegê-las. Falaremos sobre garantir que o ar criptográfico Lee seja seguro. Vamos falar sobre agora, inserir todas essas coisas no banco de dados, como criar o banco de dados para esse tipo de coisa. Há um script de instalação como parte disso que vai dar uma olhada e simplesmente quebrar tudo, mostrar como fazê-lo. E como eu disse, esta é uma forma bastante avançada aqui. Então isso é algo que você pode aprender a fazer. E se você realmente acertar isso, quero dizer, isso não é algo que todo codificador e lá fora sabe. Eu diria que é provavelmente, eu não sei, 10% 20% talvez das pessoas lá fora que realmente entendem como fazer isso para que você possa realmente se diferenciar. Ah, de um jeito grande em saber como fazer isso. Então, novamente, nós vamos cavar em tudo isso. Vou te mostrar como construir um muro, como protegê-lo. Ah, e como fazer tudo funcionar. Isso é o que está neste curso. Ah, tenho certeza que há um botão de inscrição ou algo assim por aqui em algum lugar. Então vá em frente e clique nisso, e eu vou olhar para a frente para vê-lo no curso. 2. Crie um login de banco de de de banco de de de e em: Ei aí. John Morrissey, John Morris online ponto com. Esta lição. Vou mostrar-te a versão simples deste formulário de registo. Então isso é Ah, isso seria algo que você não vai distribuir. Talvez mais usado para coisas internas. E, você sabe, você só quer não ter dedo do pé não quer ter que se preocupar com banco de dados e todo esse tipo de coisa. Você só quer ter um tipo simples de log in script que então você pode simplesmente colocar tipo de qualquer conteúdo que você quer lá para usuários conectados. Você pode ser o único usuário conectado. Você pode ter algumas pessoas. Na verdade, cabe a você. Você pode adicionar mais usuários, mas novamente, é apenas uma versão simples, não baseada em dados de um script de login. Então deixe-me mostrar-lhe isso bem rápido. Eu tenho ah, senha, nome bonito e senha aqui, e na verdade, eu preciso mudar algumas bem ali. Mas faremos isso quando chegarmos aqui. Então, se apertarmos Submeter, você pode ver o que eu chego. Uma tela simples que diz, bem-vindo John Morris. E então é assim que ele tem o meu nome e sabe quem eu sou e, em seguida, tem este clique aqui para logout links. Então aqui é onde você poderia eu ter realmente simples aqui, mas eu estou mostrando que você pode realmente pegar alguns dados de usuário. Então ele sabe quem eu sou, e eu estou logado. Se eu meio que recarregar esta página, você sabe, ele ainda vai reconhecer que eu estou logado, e então eu só tenho um link de log out simples aqui. Então, se eu clicar aqui para sair diz que você está logout agora e se eu voltar aqui Ah, esta é na verdade a página inicial. Então este é o index dot PHP e está trazendo a tela de log in novamente. Tenho certeza que você tem tudo o que funciona, mas isso é essencialmente o que o script faz. Se eu colocar em apenas algum gobbledygook para ah, nome e pastor e tentar enviá-lo, você pode ver que eu não estou logado. E se eu tentar atualizar esta página para voltar a entrar, não consigo voltar. Ok, então é uma idéia simples aqui. Agora vamos pular e ver todo o código por trás disso. Então, como eu disse, este é um script de login não-banco de dados. Então, onde nós realmente manter os dados do usuário está em um arquivo de conflito. E então isso é essencialmente eu acabei de criar em ah array e o tipo de um espaço global Natan aqui chamado usuários. E nele eu tenho o nome de usuário, a senha e o nome. Então, apenas alguns dados simples. Você poderia, é claro, adicionar os dados que quiser a isso e ficar tudo bem. Você também pode, se eu apenas tipo de copiar isso e copiar Colar e vamos apenas mudar. Vamos apenas adicionar um novo usuário aqui. Então, Dawn Juan, entraremos todo este ano e guardaremos isso. E se eu voltar aqui e agora, faço login com meu nome de usuário Don Juan e aperto enviar. Agora ele sabe que eu sou Don one, e eu estou logado para que você possa facilmente adicionar novos usuários a isso novamente, não usando um banco de dados, e você pode estar se perguntando sobre como salvar esses nomes de usuário e senhas em um arquivo PHP como este. Tudo bem, porque se eles chegaram lá, eles não podem ver esse arquivo de conflito diretamente lá, certo? Não há como fazer isso. Todos os servidores protegem contra esse tipo de coisa. Porque se eles tivessem acesso ao seu casaco, mesmo que você estivesse, digamos, armazenando isso em um banco de dados e você estivesse fazendo hash, você ainda teria que ter seu absurdo e todo esse tipo de estado guardado em seus arquivos. Então, se eles têm acesso ao seu código assim, então eles podem obter eles podem entrar em qualquer lugar que eles querem. Então, ah, tê-lo em texto simples ou não hash aqui não é mais, mais ou menos seguro. Ah, então se tentássemos Hashem aqui e fazer todo esse tipo de coisa, isso não tornaria mais seguro porque eles teriam o absurdo, hum, ou os sais. E eles poderiam recriar. Ah, o hash de qualquer maneira, então é perfeitamente bom para fazer isso para este cenário de ah em particular aqui, eles não vão ser capazes de obter acesso a este arquivo. Ah, para ser capaz de ver essas senhas e assim por diante. Certo, então esse é o arquivo do conflito. Eu vou ir em frente e fechar tipo de fechar que um de fora porque nós realmente não vamos estar mais usando isso. Hum, nosso arquivo principal aqui é que tipo de nossos manipuladores são indexados dot PHP e dentro dele. Estamos exigindo esse PHP de ponto baixo e assim em carga. Eu já falei sobre isso antes, mas eu gosto desses arquivos de carregamento porque eu posso colocar todas as minhas instruções de requisição neste arquivo de carga e, em seguida, em cada arquivo onde eu preciso de acesso para aqueles que eu só posso fazer isso exigem uma vez em carga , e carrega todas as coisas que estão aqui em vez de ter que pegar todas essas coisas e colocá-lo no topo daqui. Então isso é essencialmente o que a carga que ele vai carregar nosso arquivo de conflito. Eu só te mostrei. E então ele vai carregar um arquivo da nossa pasta de inclusões, que é na verdade a nossa classe de log que vamos usar aqui. Chegaremos a isso em um segundo. Mas isso é o que baixo faz. Só estou tentando passar por aqueles que podemos nos livrar imediatamente . Então Ah, isso é PHP de ponto baixo. Tudo bem, então agora nós podemos tipo de mergulhar nisso e mostrar a vocês o manipulador inicial, então temos PHP de ponto baixo sendo carregado, modo que nos dá acesso ao nosso arquivo de conflito e à nossa classe de login. E então basicamente precisamos fazer duas coisas. Então, primeiro, precisamos verificar se há algum tipo de dados de login que foram enviados. Então, se precisamos verificar se esse log no formulário foi enviado Então vamos verificar se Post dados se o método de solicitação é um método post. Basicamente, se um formulário foi enviado e, em caso afirmativo, então a primeira coisa que vamos fazer é passar os dados de postagem para este método de login verificar em nossa classe de login, e novamente vamos passar pelo que Isso é. Mas precisamos ser capazes de lidar com a submissão do formulário. Então isso é essencialmente o que este bloco um código é bem aqui. Está a lidar com os Loggins. Agora você percebe que não estamos redirecionando ou algo assim, e eu vou te mostrar o porquê? Porque vamos usar sessões. E essa é uma das coisas boas sobre o uso de sessões é que não temos que fazer um monte de redirecionamentos e assim por diante. Então, novo, estávamos lidando com Loggins. Nós vamos verificar para ver, basicamente, se precisamos lidar com o tempo, e se sim, vamos lidar com isso e então nós vamos voltar aqui e em cada carga de página. Vamos verificar a sessão. Então, essencialmente, o que isso faz é levar os dados da sessão. Ele verifica se há algum dado de sessão definido relacionado a este usuário que está sendo registrado. Cara, vamos falar sobre o que está aqui em um segundo, mas vai verificar se os dados existem. Se ele existir, isso vai verificá-lo contra o que temos em nosso arquivo de conflito. Certifica-te de que não é um “ah “, ou que há algum tipo de ataque ou hack ou qualquer coisa do género. Vai verificar o que temos em nosso arquivo de conflito. E se houver uma correspondência, então se o usuário é realmente um usuário em nosso sistema, então ele vai continuar e permitir que esta sessão continue. E, com base nisso, se verificarmos a sessão, incluiremos nossa página inicial, que é a que dizia “Bem-vindo, John”. Clique aqui para sair da nossa página inicial. E então se o usuário não for verificado, então nós vamos incluir nosso log in dot PHP. Então home dot PHP diz, Hey, Hey, bem-vindo E então o nome de usuário e tem o clique toe log out aqui. Isso é realmente incluído dentro do índice Stop PHP. Então este index stop peach PHP é uma espécie de rapper para todo o sistema, e é realmente um manipulador. Ah, e então, é claro, se eles não são autenticados, então nós mostramos nosso registro e formulário aqui, e isso é o que isso é. Vamos sair daqui a um segundo. Mas o que eu quero que você entenda sobre esta página em particular é que, hum é um ele está lidando com Loggins, mas seja ele é realmente é uma página de manipulador, então indexar dot PHP realmente não exibe nada Tudo o que ele faz. É Zalkind como um guarda de ponto no basquete, está dirigindo o tráfego. E é assim que está dizendo, houve ah, pós-emissão. OK, faça isso e então uma vez que esteja feito. Mas se, em seguida, vamos verificar e verificar o usuário, os usuários verificaram que vamos carregar esta página se o usuário não está verificado. Então vamos carregar esta página, está bem? E assim todas as páginas reais que você está indo para realmente ver exibição em vão ser incluídas neste ponto de índice PHP. Agora, uma coisa sobre isso, a razão de eu trazer tudo isso à tona é porque se você queria criar, digamos que você queria criar Ah, e dizer sobre página ou algo assim então e você queria criar um tipo de página nova aqui. Estamos em casa ou logar. Ok, então esta é basicamente a página inicial. Digamos que você queria criar uma página sobre. Você usaria esse mesmo manipulador. Você usaria todo o mesmo código, talvez se livrar dos Loggins aqui e se ah, este log em parte aqui. Mas o tratamento do pedido aqui porque eu vou mostrar-lhe na forma do segundo caminho. Você poderia fazer isso, mas você provavelmente poderia se livrar dessa parte. Mas você ainda iria querer esse papel. E nesse caso de dizer sobre página, seria sobre dot PHP ou log e dot PHP. Ok, então cada página que você criar vai verificar a sessão e, em seguida, ou exibir a página que eles devem ver ou exibir a página de login. Você também pode não ter que fazer uma inclusão de login aqui. Você poderia fazer. Você poderia fazer, ah, redirecionar cabeçalho para uma página de login. Então você tem opções com todas essas coisas, e há cerca de 100 maneiras diferentes de fazer esse tipo de coisa. Mas esta é a maneira que escolhi fazer isso. Então eu só quero tentar e dar a vocês uma visão geral aqui por um segundo das maneiras que você pode mudar isso e usar isso e assim por diante. Então, cada página que você criar vai tentar autenticar o uso do Earth usando. Verifique este método de sessão de verificação, e ele ou vai exibir a página de seus verificados ou ele vai exibir, fazer login e ou redirecioná-los para uma página de login. Se eles não forem verificados, cada página que você criou está bem, com isso fora do caminho, então sabemos que este é o encarregado. Se eles não forem verificados, cada página que você criou está bem, com isso fora do caminho, Sabemos que estamos incluindo o registro de um PHP. Temos home dot PHP Vamos ir em frente e olhar para a lógica real por trás Verify, logar e verificar sessão porque essas são as duas coisas principais aqui. Muito bem, então este é o nosso login da classe. Temos esse público. Propriedade para este chamado usuário. Falaremos sobre isso aqui em um segundo. Hum e, em seguida, temos o nosso método construtor em nosso construtor. O que estamos fazendo é uma globalização. Nossa matriz de usuários de nosso membro de arquivo de conflito porque ele foi criado no escopo global. E agora estamos dentro de uma função. Temos que globalizá-lo aqui. E então o que estamos fazendo aqui é basicamente capturar isso para que não tenhamos que globalizar em todas as outras funções. Estamos a capturá-lo como esta propriedade. Essa propriedade chamada usuários, então nos permite usar essa propriedade durante todo o resto da turma. Essa propriedade chamada usuários, A outra coisa que estamos fazendo é iniciar nossa sessão porque sempre que você quiser usar sessões, você tem que rebocar iniciar a sessão no ponto mais alto. Realmente? E neste caso, isso é muito alto no nosso sistema. Movendo, Lembre-se, do nosso PHP de ponto baixo, nós incluímos o uh, o arquivo de conflito, e então nós incluímos este log na classe. Então, esta seção está começando basicamente certo em porque porque ele está no método construtor. Está começando basicamente logo após o arquivo de conflito, que é bom. Ele só precisa ser iniciado antes que haja qualquer saída real. Bem, não vai haver saída no arquivo de conflito, então isso funciona muito bem. Então nós temos nossos usuários do conjunto ferroviário para que possamos usar isso novamente. Lembre-se, estes são os nossos nomes de utilizador e palavras-passe reais do nosso ficheiro de conflito. Começamos a nossa sessão. É o que estamos fazendo no nosso construtor. E nós estamos em posição, cantando uma instância dele no fundo deste arquivo. Então, basicamente, cada página que isso está incluído em você vai instância, comer uma instância desta classe e, em seguida, você vai iniciar sua sessão, você vai ter seus usuários ferroviário configurado. Então você está basicamente preparado e pronto para trabalhar com isso apenas incluindo-o em ah, arquivo particular. Tudo bem, então verifique o login. Então o que fizemos foi passar em nossos dados postais, então nossos dados postais são apenas um nome de usuário e senha. Então a primeira coisa que vamos fazer é verificar e ver se o nome de usuário e a senha estão realmente definidos nos dados da postagem. E é por isso que estamos usando uma declaração ou aqui. Então, se este é, se o nome de usuário não está definido ou a senha não disse que qualquer um não está definido, nós vamos apenas retornar. Falso. E nossa sessão, nossos dados de sessão não serão criados e, portanto, não serão. Eles não serão autorizados como logado e não poderão acessar conteúdo protegido. Então, um, qualquer coisa menos desta sessão aqui, essencialmente ser criado não vai permitir que eles entrem. Então, Então, retornando aparências falsas faz com que não consigam entrar. A próxima coisa que vamos fazer é ter tipo de nós temos, ah, tipo de método personalizado aqui e essencialmente o que isso faz. É como se fosse muito parecido com a função in array no PHP. Só que o que ele faz é que ele realmente vai um nível mais profundo por causa da forma como o nosso Reyes montou. Mas essencialmente o que este método está fazendo é que ele está verificando o nome de usuário que foi passado, e ele está looping através de nossa matriz de usuários de nosso arquivo de conflito para ver se esse nome de usuário existe em nosso arquivo de conflito. Isso é o que este método está fazendo. Você pode olhar aqui para baixo para ver como ele faz isso, mas quero dizer, desde que seus usuários ou um olhar parecido com o que eu tenho no arquivo de conflito este trabalho funcional, basta encontrar. Basicamente, o que está fazendo é que ele é apenas looping através da matriz primeiro e, em seguida, rodando na matriz nos elementos dentro da matriz. Então olhamos para o nosso arquivo de conflito porque é um raio multidimensional. Você tem esta matriz. É um loop através de cada uma dessas necessidades. Um deles é um array. Então, ele está verificando esta matriz individual aqui para ver se este nome de usuário existe. Isso é essencialmente o que esse método está fazendo aqui. E então ele vai, se ele existir, vai devolver o item real. Então ele vai retornar todos os seus indo para retornar este array aqui, ou se ele corresponde a este. Vai , devolver este, e claro, e claro, se não corresponder a nenhum, vai voltar. Falso. Então é assim que nós Isso é essencialmente como nós fora de Kato Log in. Tomamos o nome de usuário que foi passado. Se esse nome de usuário existe, nós pegamos esse ah particular, dados do usuário que matriz de dados aqui e, em seguida, o que fazemos a seguir é então nós retornamos isso a partir deste. Então esta é a nossa matriz de dados. O nome de usuário existe. Então este é o nosso raio sobre esse usuário em particular. E então nós armazenamos isso como este usuário agora, então este é um raio de dados do arquivo de conflito? E se isso não for falso porque, ah, esse método retorna false se o nome de usuário não foi encontrado. Então, se não for falso, sabemos que usamos esse nome de usuário existe. E agora o que vamos fazer é verificar a senha de nossos dados postais contra a senha do usuário em particular em nosso arquivo de conflito. Então, estamos apenas verificando se as senhas coincidem, o que, é claro, faz sentido. Se as senhas coincidirem, então o que vamos fazer é definir uma variável de chamada muito doente chamada nome de usuário , igual ao nome de usuário que obtivemos do nosso arquivo de conflito. Então, isto é o que somos. Esta é a grande coisa que procuramos aqui. Basicamente, se o nome de usuário o que? O que? Tudo o que estamos fazendo até este ponto é verificar se o nome de usuário existe em nosso arquivo de conflito em nossa matriz de usuários. E se a senha que foi enviada no formulário corresponder à senha que temos em nosso arquivo de conflito para esse usuário Então, novamente, isso é o que você imaginaria que você faria se ela existisse. E se tudo o que corresponde, então estamos definindo esta variável de sessão para que possamos agora verificar se esta variável de sessão foi existe. Quando verificamos a nossa sessão aqui em baixo porque verificamos a senha agora maneira não quero eles tenham que fazer login em cada carregamento de página, certo, porque eu obviamente seria muito irritante. Então o que estamos fazendo é que estamos salvando o nome de usuário é uma sessão, e então nós estamos apenas verificando isso daqui para frente. E, em seguida , é claro, estavam treinando True, no caso de queremos executar qualquer coisa fora deste para exibir mensagens e auto e Claro , se nada disso se isso falhar, em alguns ponto, nós só vamos voltar. Falso. Então, novamente, verifique. Faça login. Está verificando se o nome de usuário existe. Está verificando se a senha desse usuário corresponde. E, em caso afirmativo, é definir uma variável de sessão chamada nome de usuário, igual ao nome de usuário que foi enviado, e que está no arquivo de conflito. Tudo bem, então isso é verificar. Faça login agora que se voltarmos ao índice, é por isso que aqui tudo o que precisamos fazer é significar t verificar. O log in é executar isso, e nós não precisamos executar mais nenhum, tipo de. Se mais afirmações fora disso, também. Quando esta verificação de log in é executada, ou essa variável de sessão vai ser criada ou não é. E daí, bem, bem, é o mesmo que todas as páginas carregadas. Então nós apenas verificar se essa variável de sessão existe ou não. E nós, em seguida, incluir o arquivo de modelo ah apropriado. Baseado nisso. Então lidar com Loggins é o ponto inteiro é apenas para criar essa variável de sessão. Certo, então precisamos verificar a sessão, então o que faremos para verificar a sessão será de novo bem simples. Então o que fazemos é pegar essa variável de sessão. O que acabamos de criar aqui nome de usuário da sessão. Então pegamos isso. Agora, é claro, se tentarmos agarrar isso e não existir do que tudo isso vai falhar, Ok, então nós pegamos isso Ah, mesmo nós não queremos apenas verificar que esta sessão variável iss set nós cada carga página queremos verificar e certificar-se de que ele corresponde a um usuário que está em nosso em nosso arquivo de conflito porque é possível que alguém poderia apenas descobrir uma maneira de definir o nome de usuário da sessão como true e, em seguida, ser capaz de lá de que as pessoas podem ficar meio que em torno disso agora. Variáveis de sessão, é um pouco. É um pouco mais difícil, mas queremos apenas adicionar uma camada extra de segurança aqui. Então o que estamos fazendo é pegar esse nome de usuário da sessão e então vamos executá-lo volta através disso em um raio. É o mesmo método daqui de baixo e verifique se o nome de usuário que está nessa sessão Ah, variável corresponde ao que está em nosso arquivo de conflito? Então, a cada carga de página estamos pegando essa variável de sessão e estamos verificando o que está em nosso arquivo de conflito para que nós estamos certificando-se de que ele corresponde e alguém não faz login em sua conta e, em seguida, tentar entrar em há maneiras que as pessoas podem tipo de hackear isso se você não fizer isso. Então, novamente, nós estamos apenas verificando em cada carga de página para ter certeza de que o usuário que é que logado é aquele que está realmente conectado no existente são, ah, nosso arquivo de conflito. E nós não vamos. Só vamos mostrar os dados deles. Ok, então quando verificarmos a sessão e esse nome de usuário existe em nosso arquivo de conflito, então se isso não é igual toe false aqui, então vamos definir este usuário a propriedade de usuário igual a esse usuário que acabamos de puxar do nosso arquivo de conflito. Então, novamente, isso vai ter todos os dados de um ataque e então nós vamos voltar. Verdadeiro se isso a sessão é verificada e falsa. Se não agora, isso é importante aqui, porque isso é o que nos dá acesso aos nossos dados porque nós definimos isso para a propriedade para esta classe. Se voltarmos ao Índice, você pode ver que estamos definindo aqui mesmo, usuário igual a essa propriedade de nossa classe de login novamente. Lembre-se, nós estamos em posição em uma instância dele aqui embaixo e nós definimos isso para entrar. Então, quando você faz isso, você pode acessar propriedades de classe desta maneira aqui. E o que fizemos foi definir isso também. O que foi a partir dos dados que temos em nosso arquivo de conflito depois de verificar a sessão? Então, verificamos a sessão. Essencialmente grande imagem sábia. Estamos verificando a sessão, verificando se o nome de usuário é válido. E então nós estamos pegando os dados sobre esse usuário, e nós estamos armazenando-os nesta variável de usuário bem aqui para que possamos acessá-lo nessas páginas aqui. Ok, então a partir disso, se agora chegarmos ao home dot PHP e estivermos logados, você pode ver que estamos usando essa variável de usuário aqui para exibir o nome. Então isso é o quê? Quando mostrarmos este nome aqui. Isso é o que faz isso é tudo isso Pegando os dados, verificando a sessão e, em seguida, ecoando bem aqui, OK, OK, e então, por último, mas não menos importante, nós incluí algumas coisas templates aqui. Este é realmente, muito simples tipo de coisas de modelo, então eu não ficaria muito embrulhado nele. Você pode, literalmente, a razão pela qual eu escrevi isso da maneira que eu fiz com o arquivo de índice. E este sendo o manipulador e o uso inclui todo esse tipo de coisa. A razão de eu ter feito isso é para que quando você está construindo essas páginas bem aqui a página de login , uh, a página inicial bem aqui. Você pode construir estes praticamente como, apenas arquivos de modelo regulares que você pode ter me visto fazer tutoriais sobre antes que você está acostumado a significar que você pode incluir um cabeçalho. Você pode incluir um rodapé de quatro. E você pode incluir bootstrap em tudo isso. Você não precisa se preocupar com o sistema de login real em termos de tudo isso, quando se trata de como você vai modelar isso para fora. Então, de novo, eu tenho um cabeçalho e um rodapé. Podemos olhar para estes bem rápido. Eu só o tornei muito básico. Acabei de receber o tipo de médico das etiquetas de cheiro H, a etiqueta de cabeça, coisas básicas de cabeça. E novamente, se você já assistiu qualquer um dos meus modelos ing vídeos todas as coisas que eu falo lá em termos de como ir sobre template ing aplicaria Ah, aqui também. Rodapé é muito simples apenas fechando as tags que vamos para estilo. Apenas um estilo muito básico aqui. Minha recomendação é, se você vai entrar e realmente modelar isso, eu meio que me livrava de todo esse CSS e tipo de reescrever o CSS do zero. Minha recomendação é, se você vai entrar e realmente modelar isso, Como você quer e novamente Devido à forma como isso é feito, você pode colocar o que quiser nesses arquivos de cabeçalho. Você não precisa se preocupar com o registro em parte dele. Então é isso que faz com que essa parte seja importante. E útil é você não ter que injetar todas essas coisas em seus arquivos de modelo. Você realmente separou a lógica de login da lógica de template ing, e você poderia simplesmente modelar como quiser e então você tem acesso a isso nesses arquivos. Aqui, esses arquivos de modelo, você tem acesso a essa variável de usuário, que é a principal que você precisa acessar para exibir os dados do usuário. E você pode, é claro, expandir os dados do usuário o quanto quiser. Tudo bem, então isso é Ah ah ah ah. Simples. Configure aqui para usar isso Se você quiser adicionar novamente. Se você quiser adicionar usuários a isso, é aqui que você faria isso novamente. Isso é algo que você não distribuiria o dedo do pé de outras pessoas. Isso seria algo que você está usando para uso interno que Onley você vai estar vendo o código em você não dar isso para outras pessoas. Ou se você está dando para outras pessoas, seu É como um amigo seu e seu apagar esta matriz de usuários e, em seguida, nomes de usuário e senhas antes de você. Você dá isso a eles para que eles não saibam quais são seus nomes de usuário e senhas. Tudo bem. Então, Ah, isso vai bastar para esta lição. Obrigado por assistir. Falo com você da próxima vez 3. Crie um site de a base de a base de a que: Ei aí. John Morrissey, John Morris online ponto com. Esta lição. Vou mostrar a vocês como criar um script de login um pouco mais avançado, e este pode ser o que vocês estão um pouco mais interessados. Isso seria algo que você poderia redistribuir. Isso envolve um banco de dados mais do tipo avançado, complexo moderno log e script que você pode imaginar quando você ouve alguém dizer log in script. Então o que eu vou fazer é eu vou passar pelas coisas que eu mudei aqui porque eu o que eu fiz, só para que você saiba, é que eu peguei esta pasta para o simples, e eu simplesmente copiei completamente para o todo todos os arquivos para este avançado. E então eu só tive que mudar algumas coisas. Então, por exemplo, quero mostrar a vocês que conversamos muito sobre o arquivo de índice da última vez. Bem, o arquivo de índice aqui não mudou de verdade. E essa foi uma das razões pelas quais fazer isso dessa maneira funciona muito bem é porque estamos apenas chamando métodos. E Aiken, você sabe, eu posso verificar o login e verificar a sessão, entanto, quero que isso não vai mudar. Então, se eu estou usando ah, arquivo de texto ou eu estou usando um banco de dados, nenhuma dessas coisas tipo de mudanças. Então há um monte de coisas que não precisávamos mudar aqui. Então eu vou ver as coisas que isso mudou. Agora, o primeiro tipo de grande que vai ter mudado é o arquivo de conflito. E isso porque não estamos mais colocando a criação de nossa matriz de usuários aqui e armazenando nossos nomes de usuário e senhas no arquivo de conflito. Vamos armazená-los em um banco de dados. Então aqui, este é provavelmente mais como um arquivo de conflito regular que você pode ver. Onde tem os detalhes do banco de dados aqui. Então temos o nome de usuário, asenha, onome senha, o banco de dados, o host do banco de dados e, em seguida, o conjunto de caracteres. E então, junto com isso, eu vou ir em frente e fechar isso porque nós realmente não vamos falar muito sobre isso . Hum, também tenho este arquivo de carga, e nele eu tenho conflito até PHP, e agora eu tenho um novo para classe db dot PHP e, em seguida, para fazer login dot PHP. Então, tínhamos um login confiante antes antes. Agora nós adicionamos este db dot PHP Porque nós vamos estar interagindo com o banco de dados que classes bem aqui. Esta é uma classe de banco de dados baseada em PDO que eu realmente escrevi. Fiz tutoriais e escrevi e assim por diante em outros cursos e assim por diante. É óbvio que vais conseguir isto com o código fonte que conseguires. Eu não vou estar olhando este banco de dados em profundidade, principalmente porque não é realmente necessário para o que estamos fazendo aqui. Esta classe de banco de dados só funciona. Vou mostrar-lhe como usar a classe de banco de dados ou como a estamos usando em nosso script de login . Mas eu tenho outros tutoriais completos onde eu falo sobre realmente escrever um script de banco de dados. Então, se você está interessado nisso, eu iria conferir. Então ah, novamente, classe dash db dot PHP Novamente, eu vou fechar isso porque nós não vamos realmente falar uma tonelada sobre isso. Como eu disse confit, a classe DB, a classe log in. Então eu vou fechar isso porque nós não vamos realmente falar muito sobre isso, e então nós estamos meio que começando a chegar a apenas algumas coisas. Ah, esquerda aqui. Então, as duas coisas principais que alteramos nosso este verificar login neste método de sessão de verificação . E então nós adicionamos, Ah, registre o método aqui. Então pulamos para a frente e mostramos isso bem rápido. Então eu não passei e deletei todos os usuários. Eu estava fazendo alguns testes. Não há usuários no banco de dados agora, na verdade. Posso te mostrar isso rapidinho. Nós vamos para os usuários. Não há nada aqui. Ok, então obviamente não seríamos capazes de entrar aqui. Então eu adicionei este link na página de log in que diz Registrar aqui e que nos leva a este registrado na página PHP. Então vá em frente e insira meus dados aqui, e faremos a senha é Morris e bateremos no cimento. Assim diz count criado com sucesso. Ninguém pode entrar aqui e fazer John e Morris. E você pode ver que estamos logados aqui. E se formos para o banco de dados agora, vamos para os usuários. Você pode ver que temos um usuário. Ah, usuário chamado John, a senha. A senha é hash, temos o nosso nome. Então, estamos recebendo registros aqui. Agora, se eu sair aqui e ir para registrar novamente e deixe-me apenas tentar e usar o mesmo nome de usuário e registrar, ele diz que o nome de usuário já faz isso. Então temos algumas verificações básicas Teoh, ver se os nomes de usuário já existem. Temos adicionando registros a um banco de dados sendo capazes de entrar, então usando essa informação, hashing senhas, todo esse tipo de coisa. Então é isso que basicamente vou mostrar a vocês aqui. Tudo bem? Então, como eu disse, as principais coisas que mudamos nossa verificar login e verificar sessão. Mas para chegar a esse ponto, temos que fazer algum tipo de trabalho de volta. Então a primeira coisa que precisamos fazer é na verdade aqui no PHP meu admin, que era criar nosso banco de dados. Então, se voltarmos aqui e formos apenas para casa e clicarmos em bancos de dados agora, se você estiver fazendo isso em ah, servidor Web remoto, você provavelmente terá que entrar, ver painel. E há uma maneira de fazer isso no painel C você pode apenas, é claro, fazer isso. Mas você também pode fazer isso aqui dentro do PHP no meu admin. Mas você pode ver bem aqui em bancos de dados. Diz para criar banco de dados. Então eu só digitei o login. Eu defini o agrupamento. Teoh ut utf oito MB quatro sublinhado. Já esteve? Eu acredito nisso. Sim, bem aqui. Neste momento, partir do momento em que estou gravando, este é o tipo de genérico recomendado. Mas esta é a vez que tenho feito isto, este tipo de coisa tende a mudar. Mas esta é a vez que tenho feito isto, Então, dependendo de quando você está assistindo isso, eu iria e tipo do Google que tipo de agrupamento padrão deve ser. Há exceções a isso. Você percebe que há diferentes línguas e outras coisas aqui. Então, se você vai usar principalmente com uma determinada linguagem que talvez você consideraria usar Ah, alguns desses. Mas, novamente, eu procuraria. Hesito em lhe dizer para usar um particular simplesmente porque na minha experiência, eu vi esse tipo de flutuar e mudar e assim por diante, então eu apenas procuraria. Mas, em qualquer caso, basta digitar o nome do banco de dados e clicar em criar. E assim uma vez que você tem o banco de dados, então é quando você pode ir para o seu arquivo de conflito e você pode colocar no nome do banco de dados e, em seguida, em um servidor remoto, você terá ah, nome de usuário e senha que você criar quando você faz isso também. Então você pode colocar essa informação aqui uma vez que você fez isso, então eu criei você precisa Você tem o banco de dados, mas eu preciso criar a tabela com os campos e assim por diante. E então eu criei um script de instalação aqui. Assim que tiver os detalhes do banco de dados definidos em seu arquivo de conflito , vamos incluir o arquivo de conflito na classe de banco de dados. E você poderia apenas carregar esta página para que você possa apenas ir para a barra instalar dot PHP e carregar esta página, e ele irá em frente e criar a tabela para você. Curso. Se você quiser criá-lo manualmente, toda a informação está aqui. Você pode fazer isso dentro do PHP. Meu administrador. Uma vez que você entrar em um banco de dados, um, então você pode entrar e criar tabelas para criar tabela aqui mesmo colocar o nome da tabela, o número de colunas que ele ir e ele teria deixado você inserir todas as informações e você Tenho todos os dados aqui. Então eu d o nome deste aqui é I d. É um int auto não assinado. Então ele informa todas as informações aqui para cada um se você quiser criá-lo manualmente. Em qualquer caso, Ah, se formos para uma vez, está tudo feito. Se formos para instalado no PHP para que ele só vai criado ajuste não existe. Podemos voltar aqui. Isto é o que vai voltar. Ele vai descrever a tabela que os usuários tabela que acabamos de criar. Assim, você saberá ao acessar este script de instalação se ele foi realmente criado ou não. Tudo bem, então uma vez que você tenha instalado, se você usar esse tipo de controle remoto ou qualquer coisa, então ah, eu iria em frente e me livrar desse script de instalação. Não vai necessariamente machucar nada porque, hum, hum, nós não estamos tomando qualquer tipo de entrada do usuário. E, hum, você sabe, nós só estamos criando a tabela se ela já não existir. Mas você está colocando sua estrutura de banco de dados lá fora para todos verem. E eu sou da opinião também. Dê às pessoas o mínimo possível de informações sobre minhas coisas. Então, Então, novo, eu apagaria essa oferta lá. Tudo bem, então com isso dito, nós nos livramos disso. E agora nós temos Então agora nós temos um banco de dados criado. Temos as nossas mesas. Agora tudo o que precisamos realmente fazer, é nós. Primeiro, precisamos permitir que as pessoas se registrem, e então precisamos mudar a maneira como verificamos nossos Loggins e nossas sessões para corresponder ao que temos no banco de dados. Então vá para PHP registrado. Nós temos um formulário bem padrão aqui, eu diria que sim. Estamos colocando nosso arquivo de carga aqui. Então, temos acesso a todos os nossos arquivos de conflito em nossa classe de banco de dados e nossa classe de login . E então estamos fazendo a mesma coisa que fizemos antes e realmente temos Loggins aqui. Isto deve ser resolvido. Ei, posso ver. Copiei diretamente sobre registros, registro. E então mudamos isso para registrar o status. Mas estamos apenas chamando o método log in register. Então, antes de sermos usados na página de login que estamos usando. Ah, o poço, na verdade, na semana da página de índice. Bem aqui nós estávamos usando Verificar Login. Basicamente copiei isso aqui e mudei para registrar. Então vamos chamar esse método de registro, que estamos adicionando à nossa classe de login. Chegaremos a isso em um segundo. Ah, nós temos o nosso cabeçalho incluído. O formulário é bastante padrão. A única coisa que é realmente diferente é a ação. Em vez de enviar para indexar, pare PHP porque index dot PHP é o que manipuladores são Loggins. Vamos submeter isto a si próprios. Então nós vamos apenas deixar a ação em branco neste formal submeter para si mesmo e então vamos usar o método post. Ah, nós temos uma espécie de ah, mensagem de status aqui tipo de chegar a isso em apenas um segundo. Realmente não faz sentido até, você sabe, você sabe, entender o que há de novo na aula. Mas o campo A na medida em que o formulário, os campos são todos praticamente iguais. Exceto que adicionamos este campo para nome completo desde que estamos registrando. E esse é um dos campos que queremos coletar. Então, onde está antes no diário? Informá-lo apenas pedindo o nome de usuário e senha porque isso é tudo que você precisa para conectá-los aqui quando eles se registram. Também pedimos o nome completo deles para termos os dados. Agora, é claro, quanto mais dados você deseja coletar e ser capaz de exibir em seu tipo de área de membros seu anúncio Maneri ou lá você está conectado área. Quanto mais você pediria informações aqui, e você tem que mudar seu, claro, seu banco de dados para ser capaz de armazenar esses dados e assim por diante. Mas eu acho que você meio que entendeu a idéia aqui. Este formulário é realmente o mesmo que o formulário de login. E então nós adicionamos um link aqui para o registro e formulário aqui. Então, quando alguém envia este formulário, o que vai acontecer é que ele vai acionar este se bloquear bem aqui, porque que o método de solicitação terá sido postado e vai passar os dados do post para este método de registro que nós adicionamos mais aqui no nosso ah, logar na aula. Tudo bem, então vamos em frente e dar uma olhada no método de registro. Então o que estamos fazendo com os métodos de registro foram pegando nosso estavam passando em nossos dados postais . A primeira coisa que vamos fazer é verificar e ver se o nome de usuário que foi passado em um formulário de registro já existe porque nós realmente não podemos fazer nada se ele já existe. Então eu criei esta função auxiliar ou ajudar seu método chamado usuário existe. E então, se nós viermos aqui, bem, e em que nós iríamos passar o nome de usuário que foi enviado em nossos dados postais. Então o que fazemos aqui é executar uma consulta simples para o nosso banco de dados, e vamos selecionar todas as informações da tabela de usuários onde o nome de usuário é igual ao nome de usuário que foi transmitido. Agora, este método get results aqui é específico para esta classe de banco de dados que eu escrevi, e isso permite que você use instruções preparadas, e assim ele permite que você use instruções preparadas sem realmente ter que ah, Certo. Toda a ligação e a execução e a preparação e todas essas coisas você mesmo. A classe de clipe de banco de dados lida com tudo isso. E então, basicamente, o que você passa para a classe baseada em datas é sua consulta com seu espaço reservado nele. Então isso é bem aqui e, em seguida, a matriz real de dados para caber. Então este usou este elemento. O nome do usuário corresponde a este detentor do lugar, e ele passará esses dados. Usando instruções preparadas irá vinculá-lo corretamente e tudo isso. Então realmente útil torna isso muito mais fácil de executar instruções preparadas. Inquéritos desta forma ajuda a abstrair que, de fato, estar neste log na classe. Então o que isso vai nos dar de volta é que os resultados disso vão ser, Ah, vai ser, ah, ah, um array com Você é todos os nossos dados de usuário? Então vai ser nós vamos para os usuários. Vai ser um array com esses dados, o i d. O nome de usuário, a senha e o nome. E como já estamos executando essa consulta em vez de apenas retornando tour false, onde nós estamos realmente indo para fazer nossa classe de banco de dados, nós olhamos para o método get results. Se houver resultados, vai retornar resultados. Mas se não houver , vai voltar. Falso. Então, o que vamos verificar aqui é certificar-se de que falso não é o que foi retornado dessa consulta Um falso foi retornado. Então vamos pular este bloco essencialmente, e vamos retornar falso aqui embaixo. No entanto, se não fosse falso, então vamos retornar o usuário. E isso é um pouco peculiar disso porque este é o método get results. Ele realmente coloca os resultados em uma matriz indexada. Agora, neste caso, só vai haver um elemento porque só há um usuário cujo nome e usuário vai coincidir com este nome de usuário. Portanto, há apenas um elemento na matriz. Então temos que retornar o elemento no índice zero. Então é um pouco de uma peculiaridade, mas não é realmente um grande negócio aqui. Então, vamos retornar esses dados do usuário usando este usuário existe bloco. Então, porque já estamos executando a consulta, nós vamos apenas tipo de economizar um pouco de desempenho e apenas gravel os dados porque nós vamos precisar dele de qualquer maneira, Hum e então é isso que estamos fazendo aqui. Então, novamente, isso retorna falso. Se o usuário ah não existe Então, se o usuário não ah, se ele existe, Se o usuário não é igual a falso significando que basicamente o se o usuário existe que já existe, então nós vamos retornar esta matriz com o status de zero, que significa basicamente é para false e dizer que este nome de usuário já existe. Vou te mostrar onde vamos usar essas mensagens aqui em um segundo. Mas neste método em particular, em vez de apenas retornar a seu falso porque temos várias coisas que poderiam acontecer, o nome de usuário já poderia existir. A contagem pode ser criada com sucesso ou pode haver algum tipo de ar desconhecido. Porque temos várias coisas e não temos, não saberemos exatamente qual delas. Não podemos voltar ao falso dela. Se quisermos exibir mensagens de status úteis e em particular, esta aqui, queremos poder dizer-lhes que você usa seu nome já existe. Então nós estávamos indo para voltar e disse, apenas retornou falso. Vamos devolver uma matriz que diz: “ Ei, Ei, não funcionou e, em seguida, dá uma mensagem que podemos usar, certo? Então, se o nome de usuário existir, vamos retornar isso. No entanto, se ele não existir, então vamos continuar aqui e vamos em frente inserir esse usuário no banco de dados . Então, estamos usando o método de inserção da classe de banco de dados. Vamos inseri-lo na mesa do usuário em que estamos. Insira o no campo de nome de usuário. Vamos inserir os dados do post do nome de usuário. Agora, novamente, Lembre-se desses métodos de classe de banco de dados que classe de banco de dados faz as instruções preparadas para você. Então eu não estou eu não estou colocando em um novo escape un dados preparados aqui pode parecer como ele aqui porque eu não estou fazendo nada, hum, passando nomes de usuário post direto para este método. Mas esse método faz todo esse quarto ok, para que eles possam colocar passando o nome do usuário no campo nome do usuário. A senha estava executando hash de senha. Então esta senha tem são os hashes da função PHP construída que temos agora que funciona muito, muito bem. Eu recomendo fortemente que você o use sobre qualquer coisa que você possa ter visto no passado eu ou qualquer outra pessoa para fazer. Esta é a melhor e mais recente maneira de corrigir senhas de hash. E porque é uma função PHP embutida. PHP como ele atualiza e atualiza, vai continuar a fazer todas as coisas necessárias. Dee hash isso corretamente para que não tenhamos que nos preocupar com isso. E assim passamos a senha que o usuário inseriu quando enviou o formulário de registro , e usamos esse algoritmo de senha padrão. Eu realmente quero recomendar a você, menos que você realmente tenha um bom motivo. Razão sólida. Sabe por que exatamente? Eu quero recomendar que você use senha default porque senha default vai usar o mais recente e maior algoritmo PHP novamente como ele atualiza vai usar o melhor algoritmo disponível. Então isso basicamente irá garantir que você está sempre usando o melhor algoritmo toe hash, uma senha em vez de você ter que descobrir isso. Você pode apenas deixá-los lidar com isso, então usar senha padrão que vai hash a senha para nós, e então nós vamos passar em nosso nome de nosso post para fora daqui também. Então temos que nome de usuário, senha ou nome. Todos serão inseridos em nosso banco de dados usando nossa classe de banco de dados. Então, se isso retornou que o método ah das classes de banco de dados só vai retornar, verdadeiro ou falso. Ou estava inserido ou não estava. E então, se for verdade, então vamos voltar. Mensagem de status de um. E essa é a contagem ou o status de um? Uma mensagem da contagem criada com êxito. Se não o fez, ele vai pular este bloco e ele vai descer para este retorno e vai retornar zero. E ocorreu algum tipo de ar desconhecido. Nós realmente não sabemos qual é o erro. Isto é algo muito raro. Se provavelmente vai ter algo a ver com o seu banco de dados, quero dizer, você vai ter problemas maiores, eu acho, é o que eu diria se isso está sendo acionado. Tudo bem. Então que formulário de registro, então, são este método de registro irá inserir o usuário no banco de dados se eles são que o nome de usuário é único, e ele vai nos retornar uma mensagem de status que podemos trabalhar com. Então, se nós viemos aqui para registrar, enfraquece o status do registro é definido para o que há método de registro retornado, então o status do registro vai ser definido para essa matriz, o com o status e, em seguida, a mensagem dependendo se o nome de usuário existia, se foi inserido corretamente, etc. Vai devolver-nos isso. Então, por causa disso, podemos então exibir mensagens apropriadas aqui. Então, primeiro, vamos verificar e ver se o status do registro está definido corretamente? Porque se se isso fosse mesmo, porque se não houvesse dados postais enviados, ele não vai ser definido. Então não precisamos exibir nada e, em seguida, se foi definido, estávamos fazendo uma turnê em Eri aqui. E basicamente o que isso, uh, virar áreas verificando é se o status é igual a verdadeiro qual, se você não usar três iguais aqui se você não usar um estrito é o mesmo é verdade é que o mesmo é verdade, mas ele vai . Ele vai. Ah, isso fará com que isso seja avaliado como verdadeiro para a mensagem de status de um. Então isso vai se se esse status for definido como um do que isso será verdade. E nesse caso, a classe irá definir esta variável de classe para sucesso. E se não for, se as mensagens de status não forem verdadeiras, então ele definirá essa classe, um, este erro de variável de classe. Então aqui em baixo é onde ecoamos o que quer que seja essa classe. Então isto é para a nossa mensagem. Então isso basicamente olhos para que possamos dar o CSS adequado para uma mensagem aérea ou para, ah, mensagem de sucesso. Então isso nos permite ah, mudar essa classe com base no que temos de volta de nossa consulta de banco de dados. seguida, aqui em vez de revestimento duro mão uma mensagem de status, nós apenas Nós apenas ecoar as mensagens de status que recebemos de nosso de nosso script de login . Então, ele vai. Será uma dessas mensagens bem aqui. Use o nome já existe. Contagem criada com sucesso, ou um ar desconhecido ocorre dependendo de qual desses acontece a ser verdadeiro. Certo? Então é assim que lidamos com nossas mensagens aéreas. E muito rápido. Se formos ao registo e for ao John John Morris, isso já deveria existir. Sim, é assim que conseguimos esse nome de usuário. Ah, bem aqui. Ou isso. Aquela mensagem aérea bem aqui. Certo, isso mostra a parte do registro. Agora, vamos ver como verificamos isso. Então, novamente, agora estamos interagindo com um banco de dados aqui, então precisamos mudar, verificar, fazer login e verificar sessão um pouco. Bem, nós já temos um método aqui embaixo que nos permite verificar se um nome de usuário existe e, em caso afirmativo, nos dá os dados para esse usuário de volta. Bem, isso é realmente o que precisamos para ambos os cenários já. Então, em verificar, faça login. Mas você pode ver que ainda estamos fazendo isso, que fizemos isso antes. Então poste usar o nome e postar senhas. Estamos checando se disse que se não estão prontos, não podemos fazer nada de qualquer maneira. E então estamos correndo. Este usuário existe método e estamos passando o nome de usuário. Então o uso que foi enviado pelo formulário, e então nós vamos apenas executar que através do usuário existe, e se ele existe, nós vamos obter dados do usuário de volta. Se não, nós vamos obter falso de volta para que possamos executar o mesmo bloco se falso e é rigoroso aqui porque nós queremos. Certifique-se de que é estritamente falso, porque é isso que ele retorna. Se for falso. Ah, se os usuários são falsos ou se não são falsos, então vamos em frente e fazer tudo dentro deste bloco. Se não for ah, se o usuário for falso, vamos retornar false aqui embaixo. Ok, então se o usuário existe, então o que vamos fazer é verificar a senha. Então vamos usar a senha Verificar. Então esta é outra função PHP embutida para senhas. Então eles tinham senha hash e fora, e então eles também tinham adicionado verificação de senha. Isso torna muito, muito fácil para hash senhas e verificar para ver Verificar essas senhas. Nós não temos que fazer nenhum trabalho pesado. Então tudo o que temos que fazer é pegar a senha que foi enviada pelo usuário, que vai estar lá versão em texto simples. E pegamos a senha que temos do nosso banco de dados, que é a versão hash. E nós passamos esses para senha, verificação e senha. Verify irá basicamente rehash a senha de pintura de texto sem formatação exatamente da mesma maneira que foi originalmente hash antes de ser armazenado no banco de dados quando eles se registraram e ele irá verificar se eles correspondem. Então este método fará tudo isso por nós. Você já viu nas coisas que eu fiz no passado antes disso sair com senhas você teria fazer tudo isso. Agora você não tem que fazer nada disso. Tudo o que você tem a fazer é passar a senha que foi inserida no formulário e o hash de senha que você armazenou em seu banco de dados em bastarda. Verifique e ele vai verificar tudo para você. Se essa senha verificar, então podemos fazer o que fizemos antes de podermos definir o nome do usuário da sessão para, ah, o nome do usuário. E é assim que nós Então isso é o que usamos para verificar sessão aqui em baixo e nós vamos voltar verdadeiro aqui. Então é assim que verificamos o login. E, finalmente, o que estamos atrás é se o login é bom, vamos definir este nome de usuário da sessão e, em seguida, vamos usar isso aqui e verificar sessão, e vamos fazer novamente. Vamos pegar o nome de usuário, vamos pegá-lo. Ah, o nome de usuário da sessão e vamos novamente executar esse nome de usuário através do usuário existe para ver se esse usuário existe. Porque lembra-te, já fizemos isto antes. A única diferença é que estávamos indo para o nosso arquivo de conflito em nossa matriz de usuários para ver se o usuário existe lá. Aqui. Na verdade, estamos adquirindo nosso banco de dados de novo. Então, toda vez que a página é carregada onde você executa este método de sessão de verificação, ele vai procurar um nome de usuário, este bloco de nome de usuário sendo definido na variável sessions. E ele vai verificar o que definir sua contra o que está no banco de dados e ver se esse usuário realmente existe no banco de dados. Então, se esse usuário existir, nós vamos armazenar, lembrar, usuário existe, esse usuário existe. Método retorna o usuário, todos os dados do usuário se esse usuário existe. E então nós vamos armazenar isso como esta variável de usuário novamente, vamos verificar para ver se, hum, hum, isso era falso ou não. Então, se o usuário existe, então vamos definir esse usuário igual ao usuário, assim como fizemos antes e se tornaram verdadeiros. Caso contrário, retornaremos falso. Então espero que o que você viu de tudo me encontre passando por tudo isso. Essa é a diferença de uma perspectiva de grande imagem? A diferença entre fazer isso o log in verifica e ter este log na verificação entre fazer em um arquivo de texto e fazer no banco de dados não é tão diferente. A única diferença real é que você tem que ter a coisa registradora. E tecnicamente, você nem precisa ter isso. Você poderia entrar e inserir essas informações manualmente, embora o hashing seria problemático nesse sentido. Mas esses métodos aqui não são tão diferentes. Tudo o que você está fazendo é apenas pegar os dados do banco de dados em vez de pegá-los do arquivo de conflito e praticamente executar verificações muito, muito semelhantes e fazer coisas muito, muito semelhantes. Então, quando chamamos isso de avançado, na verdade não é muito mais complicado do que o que fizemos antes. E de uma perspectiva grande. Nós realmente não mudamos muito, e isso é bem literal. Se formos para a página de índice, nada mudou aqui. Então, está nas coisas da Lee Internal que realmente mudou, então a ideia é a mesma. Você quer verificar o registro no Loggins correto? Você deseja criar a variável de sessão e, em seguida, cada carga de página que você deseja ter protegido. Você verificará essa variável de sessão para ver se existe. Se ele existe na matriz de sessão e, em seguida, se o nome de usuário que está nele realmente existe em seu banco de dados. É um usuário verificado. E em cima disso, uma vez que você tem essa base no lugar, você pode fazer todo tipo de coisas. Você poderia pegar mais dados para cada usuário para que você possa exibir isso. Quero dizer, é assim que você não tem sites de comércio que não, todos os pedidos diferentes que você fez ou você sabe, você faz login no reboque. Eu não conheço o site PlayStation, e ele tem todas essas informações sobre o seu site da Microsoft. Ele tem todos os pedidos e coisas que você comprou e toda essa informação, tudo isso é baseado nesta coisa muito fundamental de ser capaz de verificar Loggins e verificar usuários. Então, ah, aprender a fazer isso é uma coisa fundamental que permitirá que você expanda a partir daí. Então é isso. Quero dizer, que há realmente, uh realmente há? Bem, não, nós realmente cobrimos o log out no outro. Então o log out é o mesmo aqui. Você apenas destrói a sessão. Hum, e é basicamente isso. Então isso é bem simples. Uma outra coisa que eu deveria mencionar, eu ia mencionar a última. E depois acho que não. Eu mencionei como estávamos vendo. Quando estamos digitando nossa senha no bloco de senha, estamos realmente vendo elas. Isso é porque eu tinha definido este tipo para texto. Você realmente deseja definir essa senha tipo dois. E eu mudei isso aqui no registro em um também. Então é por isso que se viermos aqui e escrevermos este bloco agora, você está realmente vendo os pontos em vez das palavras. Então, tudo bem, o saque para esta lição é preciso assistir. Falamos com a próxima vez. 4. Adicione um recurso de lembrete: Olá, John Morse. Aqui. John Morris online ponto com. Esta lição nós vamos começar em adicionar uma funcionalidade lembrar me ao seu log, informar o seu longo e script aqui. Agora, eu vou prefaciar tudo isso dizendo que quando você faz isso, você está, de certa forma, criando um backdoor no seu sistema. Agora vamos ver como você garante isso. E provavelmente a maior parte do que estamos fazendo aqui é a parte segura disso. Porque o real fazer a lembrar-me funcionalidade é bastante simples e simples . É o que realmente a parte mais complexa é realmente protegê-lo. Então você pode achar para o seu pedido que a coisa de lembrar de mim não é tão grande coisa. E então você ficaria bem, na minha opinião, não adicionando isso no seu roteiro se você não quer ter esse tipo de porta dos fundos, OK, OK, você eu acho que você vai ver o que eu quero dizer com isso quando entrarmos nisso. Mas o que eu acho que o que eu quero é que você não tem que ter isso e, em seguida, para alguns aplicativos, por exemplo, ah, aplicativos bancários seria um exemplo realmente óbvio. Isso é algo que você realmente não gostaria de dilatar, porque novamente, é uma espécie de ah, uma espécie de porta dos fundos para o nosso sistema. Então, com esse tipo de advertência, vamos em frente e depois dar uma olhada em como você faria isso se você quiser fazê-lo. Então, a primeira coisa que precisamos fazer é acho que a parte mais óbvia é que precisamos adicionar uma nova entrada ao nosso formulário. Então, se olharmos para o nosso script aqui, temos este novo tipo de caixa de seleção lembrar de mim aqui, e nós apenas fazemos entrada. Eu fiz isso na etiqueta de parágrafo. Só porque temos este me lembrar texto e para criar um pouco mais Ah, espaço aqui entre o botão de cimento real e o bloco lembre-se me apenas para estética principalmente. Então temos tipo de entrada de caixa de verificação. O nome é Lembra-se de mim? Quem é esse? O valor do dedo do pé um. Então, se for verificado, essencialmente o valor que está em nossa matriz post será um. E depois temos a nossa mensagem de me lembrar bem aqui, tão simples sobre isso. O que isso basicamente faz é novamente quando o primeiro submetido, haverá um novo elemento na matriz de raios com a chave de lembrar de mim e o valor definido dedo um. Realmente? O valor não importa muito porque nós vamos basicamente, se não for, se isso não for verificado, isso não vai estar na matriz de qualquer maneira. Ah, essa coisa, esse elemento completamente não estará lá, então, mas é assim que estamos fazendo aqui. Dito isto, então o que vamos fazer aqui é que vamos adicionar do que algumas funcionalidades ao nosso login de verificação porque este é o nosso formulário de login. Estamos fazendo isso em nosso login, então temos que adicionar um pouco a ele. Então, tudo é igual até este ponto aqui. Então, essencialmente, este pequeno bloco bem aqui, nós estamos apenas verificando para ver se o elemento lembre-me olhos essencialmente definido. E esta é a maneira que isso funciona que basicamente vai verificar para ver se ele está definido dedo do pé um. Então ele está verificando para ver se essa caixa de seleção foi marcada. E se assim for, vamos chamar esse novo método que criamos chamado Lembre-se de mim e vamos passar nossos dados de usuário que já temos disponíveis para nós aqui porque vamos precisar dele. E lembro-me da minha funcionalidade. E já o temos aqui, então não há necessidade de consultar o banco de dados novamente. Então vamos passar isso para isto, lembras-te de mim? Método. Certo. Então, basicamente, isso tem duas partes. Então uma vez que nós ah, uma vez que nós meio que verificamos nosso formulário, então essencialmente o que nós vamos fazer é criar um Nós vamos criar tokens. Vamos guardá-los na base de dados. Então, se olharmos para a base de dados, temos uma nova tabela chamada off tokens e off tokens. O formato é viria aqui para a estrutura, e nós temos um I d. Isso é um int. Temos um seletor, temos um token, temos um nome de usuário, e então temos um tempo em que ele expira. E se viermos aqui e olharmos para o nosso script de instalação, adicionei isso ao script de instalação aqui. Então você poderia. Tudo o que você precisa fazer é apenas visitar seu script de instalação novamente, e ele não criará esse banco de dados porque ele já existe, e ele criará esse novo para você, uma vez que este não existe. Então, tudo o que você precisa fazer é apenas visitar esta página de instalação novamente. Ele irá criar automaticamente esta tabela para você. Mas, novamente, é aqui que vamos armazenar nossos tokens de autenticação que nos permitirão lembrar as pessoas. Essencialmente. Então é isso que tudo isso faz aqui. Então, basicamente, nós vamos armazenar os tokens, e então, ah, quando alguém visitar uma página, nós vamos puxar os dados e vamos verificá-los contra Ah, cookie. Então a primeira coisa que precisamos fazer aqui é criar os seletores e estes autenticar este autenticador. Essencialmente, isso é criar uma chave pública e privada, eu diria que é geralmente o que estamos fazendo aqui. Então, o seletor que você vai ver aqui, vamos armazenar o seletor basicamente aberto em nosso cookie, e então nosso autenticador, vamos fazer um pouco de codificação e, em seguida, estamos usando bytes aleatórios foram usando a codificação aqui. Basicamente, estamos apenas gerando. Números aleatórios aqui para fazer isso. Quero dizer, provavelmente não é exatamente isso, mas eu meio que olho para ele como uma chave pública e privada. E o que fazemos aqui é, uma vez que temos aqueles gerados, então vamos definir um cookie. E o que fazemos aqui é, uma vez que temos aqueles gerados, O nome do biscoito será lembrar-se de mim? E, na verdade, é bom. E põe isto aqui em baixo. O valor do cookie. Os dados que estão realmente sendo armazenados no cookie são os dois pontos seletor. E, em seguida, baseamos 64 código novamente o autenticador. Ou, neste caso, essa é a primeira vez para o autenticador. Então isso cria um cookie que essencialmente tem esses dados, o seletor e este autenticador nele, nós dissemos, Ah, tempo aqui. Ah, quando queríamos expirar, isso é Ah, são uns 10 dias no futuro. Ah, este é o caminho do domínio. Se estiver vazio , escolherá o domínio atual. E então isso é para ah, acredite que é apenas https. E então TLS apenas algo assim. Então isto é, se formos olhar para o Francisco e olhar para o set cookie. Então, sim, seguro. E então http, apenas Então isso é basicamente, hum ele só vai fazer isso se for uma conexão https, então você vai ter que prestar atenção a isso. Dependendo de onde você instalar isso, você pode ter que definir que o false e, em seguida, HC TP só significa que ele não pode ser acessado através de linguagens como javascript, o que é importante. Então você só queria que isso pudesse ser acessado através de Http novamente. Isto é tudo parte da forma como estamos a garantir isto. Certo, então vamos definir esse cookie, e então quando definirmos esse cookie, é, isso é o que vai para que os Cookies vão residir no navegador do usuário. Então, quando eles dizem para fechar o navegador, esse cookie não será excluído. E da próxima vez que eles abrirem o porque novamente com sessões, cada vez que eles coaxam fecham seu navegador, essencialmente, isso terminará a sessão para que eles sejam basicamente desconectados automaticamente. Isso nos permite persistir Loggins através de ah, sessões de navegador. Então esse cookie, quando fecharem o navegador ainda estará lá. Quando abrirem o navegador e vierem visitar a nossa página, se clicarem nisso, lembram-se de mim? Caixa de seleção. Então nós vamos essencialmente auto-logá-los de volta é realmente o que isso é. Então, o que eram mesmo? Nós preparamos o biscoito. Aqui temos o nosso seletor. Temos o nosso autenticador, e é isso que vamos precisar para você para o nosso símbolo aqui. Então esta parte aqui é essencialmente que estamos limpando as fichas antigas. Então, se você com este sistema, se você fizer login e marcar a caixa Lembrar de mim, ele vai criar um token que vai ser armazenado no banco de dados. E então, se você realmente pressionar o botão de logout, vamos excluir o cookie do seu navegador porque você tem, essencialmente, quando você clica em logout e novamente, você pode alterar a maneira como o comportamento deste como você quiser. Mas na minha opinião, quando você clica em sair, você está basicamente dizendo que eu não quero mais ser lembrado. Não quero ser logado automaticamente da próxima vez. Eu não posso voltar. Caso contrário, quero dizer, por que você clicaria em sair? Então vamos apagar biscoito. Bem, o que acontece quando você exclui o cookie é que se eles voltarem para o site e eles clicarem na caixa de lembrar de mim, nós vamos gerar outro token e que o seletor e o ar autêntico serão Diferente. E assim ele vai criar um novo, basicamente novo token dentro do banco de dados para esse usuário. Então, essencialmente, o que aconteceria é, se não fizéssemos nenhuma limpeza, você teria, você sabe, vários tokens no banco de dados para o mesmo usuário. E, em seguida, dependendo de quantos usuários você é, você tem que cada um deles, cada um que usa poderia ter vários tokens. 10 15 Com o tempo , pode ser 100 200. De modo que essa mesa vai crescer enorme e ser você vai ter um monte desses off tokens lá fora, que nunca é uma boa idéia para qualquer coisa relacionada à segurança. Então, essencialmente, o que estamos fazendo aqui é quando eles se conectam e isso se lembra de mim, caixas marcadas e estamos executando este método lembrar me aqui. Vamos supor que todos os tokens antigos do ar vão ser inválidos? Então isso é essencialmente o que isso faz agora. O único que eles devem ter apenas um token no banco de dados na tabela. , Porque nós estamos excluindo eles enquanto eles criam novos,mas se por algum motivo havia um monte deles ou o que seja, isso realmente excluirá cada token no banco de dados que para esse usuário em particular que estava fazendo login neste momento. Então, se eles tinham 10 e não iria apagar todos os 10 Então é isso que isso faz aqui . Depois, de lá. O que queremos fazer é inserir o novo token. Agora que dissemos o nosso biscoito, limpamos todas as nossas fichas antigas. Agora queremos inserir este novo token no banco de dados para que possamos usá-lo quando estamos verificando nossa sessão. Então nós fazemos. Ah, insira em seu banco de dados, onde incidentes e off tokens temos seletor, nome de usuário token e expira quem passou em nosso seletor. Direto para cima nós hash são autenticador basicamente a razão, como eu entendo isso e novamente algumas dessas coisas quando você começa a entrar nesta segurança realmente pesada em criptografia e todas essas coisas ficam uma lambida, é um pouco confuso, mesmo para mim. Mas basicamente a idéia aqui é por hash este autenticador. Mesmo se alguém tivesse acesso ao nosso banco de dados e tivesse o seletor e o autenticador, eles ainda teriam que fazer. Ah, trabalho para ser deseclodido sh este símbolo. Então, e é significativo, e o suficiente para que eles levassem um tempo para serem capazes de fazer isso. Então é por isso que discutimos isso. E, em seguida, associá-lo com o nome de usuário. Porque, é claro, um token pertence a Toa um usuário, e então nós colocamos lá quando ele expira, caso queiramos usar isso em algum momento. Embora, realmente, o que importa é o tempo que definimos aqui para este cookie expirar. Certo, então com isso acabamos recapitulando alguém clica na caixa de lembrar de mim. Nós executamos este método lembre-se de mim. E o que esse método faz é criar basicamente uma chave pública e privada. Tipo de que armazenamos em nosso cookie, e também armazenamos em nosso banco de dados. Ok, então é novamente, é um cookie no navegador deles. E nós também começamos em nosso banco de dados neste off tokens, uh, esta tabela off tokens. Assim como você se estiver caindo por muito tempo, você pode começar a ver lá. O que isso permite que o que isso nos permitirá fazer é quando eles voltarem ao site, ser capaz de pegar o cookie e dizer, OK, você tem esse cookie. Vamos verificar o banco de dados para ver se é um token de autorização válido. E se for, então seremos capazes de conectá-los automaticamente e que essa parte é essencialmente o que fazemos aqui. Então esta é toda a coisa nova bem aqui antes de fazermos nome de usuário era Ah fazer nome de usuário sessão e todas essas coisas estavam aqui antes. Então este bloco de código, certo? Aqui está o que adicionamos. Então, basicamente, o que estamos fazendo é verificar se o nome do usuário da sessão está definido porque novamente neste cenário, estamos assumindo que eles fecharam seu navegador. E assim a sessão terá sido encerrada. E assim, quando eles voltam sessão nome de usuário não será definido. Então nós vamos verificar e ver se isso disse, se é se ele está vazio, se ele está vazio e há um cookie definido para este nosso site chamado Lembre-se de mim, que basicamente está nos dizendo que temos o cenário que queremos, que é que eles não têm uma sessão ativa e eles têm o cookie lembrar me. Então isso significa que vamos em frente e conectá-los automaticamente. Então o que fazemos é usar essa lista de elevadores e explodimos nosso biscoito. Então eu me lembro quando dissemos que nosso biscoito Ah, nós criamos uma corda com dois pontos nele assim. E, em seguida, temos seletor de um lado e autenticador do outro lado. Então, essencialmente, quando a explodimos, o que acabamos com é que acabamos com uma matriz. Um elemento é o seletor, e um elemento é o autenticador, e então nós executamos. Nós executamos isso através da lista, que basicamente leva o elemento que é o seletor e define que igual ao seletor de variáveis e o elemento que é o autenticador e define que igual à variável autenticador aqui. Então acabamos com, hum, são seletor real do nosso conjunto de cookies para salgar o seletor valioso e os dados do autenticador real do nosso conjunto de cookies para autenticador, que é o que queremos, Basicamente. Tudo bem, então o que vamos fazer é quando uma consulta, nosso banco de dados, e vamos selecionar os dados do banco de dados off tokens onde o seletor é igual. Em última análise, estamos fazendo declaração preparada, mas em última análise, onde é igual a seletores R. Então, estamos pegando o seletor do nosso cookie e usando isso para o banco de dados queer e encontrar esse seletor em nossa tabela off tokens. Agora, se não existe, então isso significa que algo não está certo. E não vamos dizer que não vamos fazer nada disto, está bem? Não vamos verificar a sessão. Essencialmente, nós estamos O que basicamente aconteceria é quando nós viemos aqui para executar o hash é igual a que iria falhar. Portanto, nós não iria definir a sessão aqui, e então nós continuaríamos aqui e finalmente retornamos false, então nós nunca iria verificar a sessão. Certo, então o que estamos fazendo aqui é ver se esse seletor existe. Se esse seletor existe, então nós vamos pegar basicamente todos os dados de token fora. Então isso é outra vez. Ele vai ter ah, o i d. O seletor, o token, o nome de usuário e quando ele expira, e então nós estamos pegando todos os dados de token, e então o que vamos fazer é Vamos usar este hash é igual a ah, função aqui. Então, basicamente hash iguais vai verificar o o token que temos do nosso banco de dados contra o autenticador que temos do nosso cookie vai ver se eles são iguais uns aos outros e você usa hash igual porque novamente, Isto fica complicado. Mas há um problema de tempo em que, se você não usar hash igual, poderia realmente tornar mais fácil para alguém tentar e força bruta porque eles mudam a certa primeira parte do, ah, o token. Se mudarem a letra, vai fazê-la correr mais rápido. Quero dizer, novo, isso fica muito, muito fundo nisso. Hum, eu não sei se isso é necessariamente 100% preciso saber. A necessidade de saber é que você precisa executar o shash igual a. E então nós passamos em nosso token, que novamente, este token é onde nós salvamos nosso autenticador. Nós pash passado isso em e então nós passamos em nosso autenticador que nós realmente temos do nosso cookie. Então o nosso autenticador que obtivemos do nosso banco de dados compara-o com o nosso autenticador que obtivemos do nosso cookie. E assim ele vai ver se eles se igualam um ao outro se eles dião. Então, se isso for verdade. Então o que vamos fazer é lembrar, isso pressupõe que o nome de usuário aqui está vazio. Então a primeira coisa e precisamos de nome de usuário aqui se vamos fazer uma autenticação real . Então, precisamos definir nome de usuário igual ao nome de usuário que agora temos obtido do nosso banco de dados do nosso login aqui. Então primeiro fazemos isso, e então também precisamos definir nossa variável de sessão. Então, o biscoito é basicamente vai ser quase um bypass único. Então ele está indo para ele vai essencialmente ignorar apenas a verificação padrão para sessão e verificar o este off token e todas essas coisas. E então, se isso é tudo bom, então ele vai definir a sessão e, em seguida, de cada revisão de página a partir de então será baseado fora desta sessão, porque esta sessão agora não estará vazia. Então essa coisa que este bloco se nunca vai disparar, ok, e então uma vez que temos nosso nome de usuário e nossas sessões definidas, e então nós podemos voltar para nossos treinadores regulares como tínhamos antes, que é onde nós obtemos o dados do usuário para que possamos exibir isso em nossas páginas. Então, como você pode ver, é por isso que eu vejo que esta é uma espécie de porta dos fundos no sentido de que você está usando um cookie para contornar seu tipo de autenticação de sessão. Agora você está amarrando de volta a ele. Mas isso é essencialmente sexual o que isso permite que você faça. E é assim que se faz. Ah, lembra de mim? Funcionalidade. Agora, um casal. Eu chamaria ressalvas aqui, dependendo da versão do PHP que você está executando. Você pode não ter essa função de bytes aleatórios, e você pode não ter a função hash igual aqui. Então o que eu fiz é que eu incluí uma classe chamada Random Compact, que fará com que esta função de bytes aleatórios esteja disponível. Se não estiver disponível até a queda no PHP. E isso hacks hash é igual a classe, que fará hash igual disponível se não estiver disponível por padrão no PHP, ambos verificados para ver se essas funções já existem antes de realmente fazer alguma coisa. Então, se eles já existem, eles só vão usar os construídos no PHP. Mas se eles não existem, então eles vão usar os que eles criaram nessas classes que basicamente fazem a mesma coisa. Então uma coisa que você vai notar em nossa carga ah e eu iria abrir em nosso PHP de ponto baixo é agora que estamos incluindo este comm pat aleatório, e este hash é igual aqui também. Então, se você quiser, talvez você não queira incluí-los. O que você poderia fazer é vir aqui e você poderia comentar isso fora e então apenas tentar e executar um login. Se você não receber nenhum herdeiro executando um login, então você pode remover com segurança esta pasta compacta aleatória neste arquivo de hash igual e isso requer aqui. E porque você tem o que você precisa para construído em PHP. Então, Então, se na função deles, não existem erros. Então, se você não tem o que você precisa, apenas tentando fazer um registro e vai jogar no ar e você vai saber imediatamente. Então, novamente, você pode acalmá-lo. Aqueles fora, veja se funciona e se funciona, e você deve estar pronto para ir, tudo bem. Então, com tudo isso dito, então podemos dar uma olhada nisso. Deixe-me ir em frente e entrar, e eu vou bater o bloco lembrar me e enviar e que me registra e nós podemos vir aqui para os tokens off e você pode ver que criou um novo off token aqui. Ah, para eu usar. E então, se viermos aqui, então vamos para nossas configurações e leva um segundo para chegar aqui. Ah, vídeo para configurações de conteúdo, cookies e, em seguida, ver todos os cookies e para baixo. E, claro, dependendo do navegador usado ser diferente. Tenho um tipo de domínio em que estou. E então se olharmos em nossos cookies aqui, temos isso Lembre-se de mim e aqui está o nosso conteúdo do nosso cookie aqui. Então temos o biscoito. Agora, se eu fechasse esse navegador e voltasse para ele Ah, e a sessão seria encerrada, mas eu seria capaz de entrar de volta com apenas o cookie. Agora você vai ver aqui. Se eu clicar aqui para sair, então eu vou aqui para clicar aqui para fazer login novamente, que apenas me leva para a página de índice. Você vê, o registro informa volta. Isso é porque se olharmos para o nosso log out que dot PHP. Isto está essencialmente destruindo aquele biscoito. Então, o jeito que você destrói um biscoito é que você disse. Você definiu o biscoito e disse que ele expiraria para um tempo no passado. É o que estamos fazendo aqui. É por isso que temos menos seja qual for o tempo menos 3600 segundos. Então isso mata o cookie e isso essencialmente, quero dizer, você poderia provavelmente você poderia pol Eu odeio dizer que você não pode Você provavelmente hackers provavelmente descobrir uma maneira de falsificar toda essa informação e esse cookie e ser capaz de carregá-lo e trazê-lo de volta. Mas isso seria, quero dizer, muito, muito difícil de fazer. E basicamente, uma vez que você sair dessa vez que esse token se torna essencialmente inválido porque da próxima vez que você entrar e bater, lembre-se de mim. Ele vai criar um token totalmente novo. Vai sobrescrever o outro, e você não tem mais esse cookie no seu navegador. Então, basicamente, faz com que você não possa mais fazer login dessa maneira. Você tem que se conectar novamente e você tem que usar o bloqueio de lembrar de mim. E claro, se você não verificar, lembre-se de mim, Block. Não vai fazer nada disso fora do biscoito. Só não faz nada disso porque é tudo baseado em se ou não as caixas de seleção marcadas ou não. Tudo bem, então é assim que se acrescenta. Lembre-se de mim, funcionalidade para o seu script de login. Obrigado por assistir. Falamos com você da próxima vez. 5. Crie uma revisão de senha segura: Olá, John Morse. Aqui. John Morris online ponto com. Esta lição. Vou mostrar-lhe como adicionar um recurso de redefinição de senha ao seu script de login aqui. Então isso vai ser, ah, ah, um recurso de senha de e-mail. E então nós vamos ter que atualizar algumas das coisas que fizemos até este ponto para que nós tenhamos Ah, um e-mail. E a razão pela qual é uma senha de e-mail é que, na maioria dos casos, essa será a maneira mais segura de você fazer isso. Porque para alguém ser capaz de hackear de novo qualquer tipo disto, este tipo de coisa vai ser um backdoor essencialmente para o nosso sistema. Por isso, queremos ter muito cuidado com isso. Então algum hacker ah teria que não só saber o endereço de e-mail e tudo isso não só hackear nosso sistema, mas eles teriam que ter invadido a conta de e-mail do usuário. E então ah, novamente, quando você chegar a esse ponto, essa pessoa provavelmente tem mais problemas do que o que está acontecendo com o seu sistema. Então é muito melhor do que ter algo em seu site onde eles talvez digam algumas, ah, perguntas de segurança ou coisas dessa natureza. Ah, simplesmente porque então você está meio que colocando tudo isso. Toda a segurança em você e no seu sistema. Ah, e você vai ser de novo. Vai ser o seu sistema. É um alvo para hackear. Enquanto que se você fizer isso por e-mail, vai ser Gmail ou Yahoo É alguma dessas coisas? Então, novamente, geralmente, maioria das situações a maneira recomendada de fazer isso é com uma redefinição de e-mail. Então eu vou te mostrar isso bem rápido. Verá que temos aqui mesmo. Temos essa senha de redefinição. Então vamos em frente e clicar nisso, e eu vou entrar e digitar meu endereço de e-mail. Agora, se primeiro de eu inserir algo que não existe, vamos receber um erro. Esse e-mail não existe em nossos registros. Então, há isso. E então se eu inserir ah, endereço de e-mail correto, então vamos receber esta mensagem de sucesso que diz, Verifique seu e-mail para o link de redefinição de senha. E então, se eu vir aqui para o meu programa de e-mail, eu vou arrastar isso aqui para baixo. Você pode ver aqui. Ah, o que eu acabo com este Ah vazando o meu e-mail aqui que eu posso usar. Vamos em frente e clicar nisso e isso vai nos levar a esta página de redefinição de senha aqui . E então eu vou redefinir minha senha para que eu realmente não me lembre qual foi a última vez . Eu disse para ir em frente e redefinir, bater, enviar e ele diz, Senha atualizada. Vai acertar com sucesso. login aqui e digitaremos o novo e-mail aqui. Então estamos todos logados. Ok, então é isso que nos permite fazer. Ah, e por isso é bastante simples. Agora, se voltarmos e me deixarmos voltar para o meu programa de e-mail rapidamente e eu tentar usar o mesmo reset novamente e eu tentar redefinir meu e-mail, você verá que eu recebo um código de erro. Ok, então eles não foram capazes de processar isso. E é isso que queremos. Porque agora, uma vez que esse token é usado, não queremos que ele seja usado novamente. Certo, vou te mostrar como fizemos tudo isso. Então essa é a ideia básica. Então, há algumas coisas que fizemos aqui que precisarão passar. O primeiro passo passará aqui para o script de instalação. Há algumas mudanças aqui, e, ah, ah, algumas disso vem, algumas são apenas limpas e vem de apenas fazer testes adicionais em, ah, um número de servidores diferentes. Então eu só estava tentando ter certeza de que em todos os tipos de servidores diferentes configurados, isso ainda iria funcionar. Então, há algumas coisas de mudança que tivemos que limpar aqui um daqueles anos. Você notará que adicionei os detalhes do banco de dados aqui e criei uma conexão exclusiva diretamente através do PDO para o banco de dados. E a razão pela qual eu fiz isso é ah, nossa classe de banco de dados que estamos usando é principalmente para pós-instalação, então eu poderia passar, e eu poderia atualizar a classe de banco de dados para isso. Mas eu realmente não queria entrar nisso com este curso particular, porque eu quero me concentrar no log na parte s. Então o que eu fiz aqui é apenas eu criei ah, outra conexão com o banco de dados de centrist separado do que usamos no resto do script e Isto está no Lee na página de instalação, então você pode meio que olhar através disso, mas no final do dia, realmente não importa. Ah, o que importa aqui é que nós criamos uma nova tabela chamada Redefinição de Senha, e nós temos o campo d e o campo de e-mail ah, campo seleção, um campo de token e um campo de expira. Então, se você olhar, é quase idêntico aos nossos tokens off, exceto que estamos usando e-mail agora em vez de nome de usuário. E isso é só porque para sessões precisamos que o usuário nomeado é o que estamos usando para redefinições de senha. O e-mail é, é o que estamos usando. Então essa é a única razão para mudar as coisas mudaram. Você também percebe que eu adicionei outro campo aqui chamado e-mail para a tabela de usuários, porque agora precisamos coletar esses dados para que possamos fazer enviar a redefinição de senha. Então o que você pode fazer é se você apenas entrar no meu banco de dados de sequelas e você vai para os usuários e você vai para as operações, você pode vir aqui e excluir a tabela. Apenas apague a mesa. Presumo que esteja em um ambiente de testes. Obviamente, se você vai, você já está usando isso, então isso provavelmente não é necessário. Algo que você vai querer fazer. Mas ele está excluindo a tabela, e então você pode voltar e visitar o script de instalação novamente. Visite install dot PHP e ele irá reinstalá-lo com o novo campo lá. Ou você poderia ir se quisesse entrar na minha sequela. Ah, e você poderia pensar em sua estrutura e então você poderia adicionar um campo e então Ah, vá embora. É aqui em baixo. Você é capaz do dedo do pé. Adicione mais campos ainda criados. Ah, adicione uma coluna aqui para que você possa adicionar uma nova coluna se você quiser e ah, naquele campo de e-mail lá, então seja qual for a maneira que você quiser fazer isso. Mas toda a informação em termos de como ela é criada está bem aqui. É um gráfico ah ah var para 55. Tudo bem, então isso é uma espécie de parte da configuração inicial lá em cima. Então nós também em um formulário de inscrição. Adicionamos um campo para e-mail aqui. Então, adicionamos um e-mail. Ah, campo aqui. Nós poderíamos realmente definir este tipo de e-mail dois. Então o pequeno HTM Island cinco vai realmente verificar para nós. Isso é uma coisa que podemos fazer lá. Classe está definido para tecnologia ainda, porque temos todo o nosso estilo padrão baseado nisso, ele é. Tecnicamente, ele ainda é tipo de um campo de texto é apenas um tipo especial de nome de campo de texto é definido para e-mail . E então se formos para o nosso script de login aqui e olharmos para a nossa função de registro aqui , Então temos ah conjunto de campos obrigatórios, nome de usuário, senha e e-mail. Esses serão campos obrigatórios. Ah, isso é só uma verificação rápida. Então, basicamente, o que você faz é você loop através desta matriz necessária e, em seguida, você verificar para ver se a chave no post dados que foi enviado está vazio ou não. Se estiver vazio, se alguém estiver vazio, o 1º 1 vazio, vamos retornar uma mensagem de status de zero Ah, status de zero. Em uma mensagem de por favor digite o seu e, em seguida, qualquer coisa. A chave é o nome de usuário, senha , e-mail, etc. De modo que lida certificando-se de que obtemos são campos obrigatórios. Neste fim, também estamos fazendo isso no formulário. E se olharmos para Registrar PHP. Estamos fazendo o necessário aqui, mas você sempre quer. Você não quer confiar nas coisas HTML 5. Você nem sempre terá suas próprias costas e roteiro fazendo essas verificações também. Tudo bem, então isso faz campos obrigatórios. E então eu estava indo para lá porque é uma coisa nova que eu adicionei aqui, eu não acredito que eu tinha isso antes. Temos a nossa verificação padrão para ver se eles usaram nome já existe. E então tudo o que fizemos foi adicionar esta linha aqui, que acrescenta agora vai pegar o e-mail do Post Data e colocá-lo em nosso banco de dados. E isso é realmente a única coisa fora disso aqui em cima que mudou em termos de inserir os dados em nosso banco de dados. Então isso é bem simples. Então vamos a página do registro. Então, agora, quando alguém se registra, ele insere seu nome, seu e-mail, seu nome de usuário e sua senha e enfraquecido. Se formos fazer login, clique aqui para sair, então vamos nos registrar aqui. Agora, eles irão inserir nome, e-mail, endereço, nome de usuário e senha. Tudo bem, então isso nos deixa pronto agora. Recebemos nosso e-mail. Ah, que estamos coletando. Agora podemos usar isso para nossa senha. Reiniciar. Temos o nosso script de instalação. Muitas dessas coisas não mudaram, Index. Muitas dessas coisas não mudaram, E este tipo de coisa não mudou nenhum, uh, login aqui? A única coisa que foi adicionada aqui foi o link para a senha de redefinição. Então, se voltarmos ao nosso registro informe que tudo o que adicionamos aqui foi este link de redefinição de senha. Então isso é tudo o que mudou lá. Nosso arquivo de conflito. Nós adicionamos algumas coisas. Então, porque estamos enviando um e-mail, agora precisamos de mais algumas coisas. Então precisamos da URL do site porque vamos enviar um link para quem? Aqueles que ligam de volta ao nosso site. Então, ah, precisamos que o seu l em vez de codificá-lo em todo o script. Porque se eu fizesse isso, então você teria que entrar e mudar cada instância disso. Eu só criei Ah constante aqui. E você pode mudar isso para o seu l Onde você tem isso instalado. É a pasta de qualquer coisa. Seja qual for a pasta em que tens este guião, é o que colocaria aqui de novo, porque estamos a enviar e-mails. Também precisamos de um nome e endereço de e-mail para que você possa definir o nome e endereço de e-mail aqui. Curso. Você também deseja definir os detalhes do banco de dados para o banco de dados que você criar para isso. Ah, e então dissemos uma data padrão. Fuso horário padrão. Eu só disse isso para UTC. Você pode, claro, definir o que quiser. Mas muitos servidores nos dias de hoje, se você não definir isso, vai lançar algum tipo de erro. Então eu só coloquei isso lá dentro, , e isso pode ser definido e em qualquer arquivo. Então alguns servidores, se ele está definido em qualquer arquivo, então isso Você não vai ver o ar. Mas eu coloquei no código só para que você não tenha que lidar com esses erros. Então, e está definido para usar UTC, que para o nosso script é Ah, tudo bem. As datas não estavam realmente exibindo em qualquer lugar neste momento, estamos apenas usando-as para prazos de expiração, para nossa redefinição de senha e para nosso login automático. Então o nosso recurso de lembrar de mim. Portanto, não é algo que tenha qualquer importância em termos de exibição. Certo? Então foi assim que mudamos nosso arquivo de conflito. E então mudamos nossa classe de banco de dados um pouco. Basicamente, o que muda este usuário execs existem Método. Eu quero abordar isso porque esta é realmente uma boa lição apenas para ir sobre a atualização de funções ou métodos. Então, se você se lembrar, antes que este só aceitasse um parâmetro e esse parâmetro fosse definido como padrão para o nome do usuário Bem, nós podemos. Seria bom ser capaz de verificar o Se o usuário existe por mais do que apenas o usuário I d ou o nome de usuário ser capaz de verificá-lo por qualquer coisa. O e-mail e, em particular, útil no que estamos fazendo com nosso, hum, o que estamos fazendo com nossa redefinição de senha porque vamos trabalhar com o e-mail . Por isso, é bom poder verificar para o usuário por e-mail. E é isso que essa mudança nos permite fazer. Então, se você se lembrar, antes que tivesse um parâmetro e você iria ah set. Basicamente o quê? Você qual era o valor do nome de usuário para que você passasse o nome de usuário que você queria verificar para ver se ele existiria. Então o que eu fiz foi sair. Este primeiro parâmetro ainda precisa da mesma coisa. Mas então eu adicionei um segundo campo chamado Wear Field, e eu o predefini como nome de usuário. O que isso faz é que qualquer um dos outros lugares onde eu usei usuário já existe, e foi para como ele foi construído da maneira antiga. Todos eles ainda estão trabalhando, e isso é importante porque nós não precisamos necessariamente. Não é necessariamente fácil voltar através de uma atualização todas as instâncias em que chamamos usuário existe. E então eu atualizei a função para que ela seja compatível com as formas como já a usamos em nosso código, porque esse primeiro parâmetro ainda é a mesma coisa. E então porque este é tem um valor padrão. Se o parâmetro não é que este segundo primers não passou em, ele só vai usar este nome de usuário bem aqui. Portanto, o padrão é aceitar ah nome de usuário e usar o nome de usuário para Campo de campo para verificar se o usuário existe. No entanto, agora podemos passar em outra coisa que poderíamos colocar no endereço de e-mail e o campo de desgaste ser definido para e-mail. E então agora ele selecionará todos os usuários. Nossa seleção de todos os usuários. Onde o e-mail Porque isso é o que dissemos é o campo onde Ah é igual e este é o nosso lugar. referência do titular é o suporte do lugar e, finalmente, o nosso valor de desgaste. Então, onde o e-mail é igual a este endereço de e-mail ou se é o padrão onde esse nome de usuário é igual, onde nome de usuário é igual a qualquer nome de usuário passado, certo. Então essa é uma atualização que fizemos para nossa classe de banco de dados lá, e agora estamos meio que voltando para o que resta aqui. Então temos três novas páginas. Perdemos a senha dot PHP reset dot PHP e reset process dot PHP. Então, a página de senha perdida é onde estamos, na verdade, quando alguém quer solicitar e dizer que perdeu sua senha e solicita uma redefinição de e-mail. Esta é aquela página. Então esta página, em termos do que é, é realmente bastante simples. É um formulário. Então temos o nosso formulário aqui que se submete a si mesmo, e a única aceita em campo é o endereço de e-mail. Então voltamos aqui e vamos redefinir a senha. É um formulário com um campo e exceto o endereço de e-mail. E então, se a senhorita for submetida, vai passar a informação para Los Password. Ok? E eu meio que estou indo da grande visão conceitual do que fizemos, e então vamos mergulhar nos detalhes. Mas ele vai passá-lo para este último método de senha perdida em nossa classe de log in script e processá-lo e eu vou te mostrar o que fazemos com isso em um segundo. A próxima página é a página de reposição real. Então é para isso que as páginas irão quando clicarem no link no e-mail. E então este está um pouco mais envolvido. A primeira coisa que precisamos fazer é você notar que onde nós meio que temos nossa inclusão aqui em cima , e nós estamos meio que isso é um pouco diferente deste tipo de forma, onde temos todas as nossas coisas inclusas aqui em baixo. Toda a nossa lógica PHP aqui em cima, certo? É meio que separado de forma limpa. Este é um pouco diferente porque se eles são, se eles tentam apenas visitar esta página diretamente e eles não têm os parâmetros de consulta adequados na URL. Então precisamos mostrar uma mensagem aérea aqui embaixo que diz que houve um problema e isso está um pouco entediado misturado. Mas o que estamos fazendo é checar se esses parâmetros de consulta existem. Então há um seletor e um validador. E no método de senha perdida aqui, o que é onde realmente criamos e enviamos o e-mail. Nós colocamos esses parâmetros na U. R. R. L. Então, o link no e-mail já terá esses parâmetros. Então, basicamente, isso ajuda a lidar com qualquer um que está tentando ir diretamente para isso e e flutua por aí. Eles precisam ter os parâmetros de de consulta certos. Então nós verificamos para ver se esses parâmetros de carreira existem, e então nós verificamos para ver se eles são Hexi Decimal porque você vai ver novamente quando tivermos o método de senha perdida, nós podemos criar, hum, criamos basicamente um nonce ou criamos um token, e convertemos para Hexi Decimal. E então quando estamos, quando alguém clica nesse link, os parâmetros de consulta devem ser ambos Hexi decimal, e assim podemos verificar se eles são Hexi Decimal. Isso nos ajuda a lidar com qualquer coisa. Ou alguém pode tentar visitar esta página e definir seletor igual a algum script Java aleatório ou alguma String SQL ou qualquer coisa assim. Não vai validar como Hexi Decimal. E, portanto, essas verificações falharão. Ok, então isso é apenas um pouco de filtragem de entrada bem aqui. Então vamos verificar se eles são Hexi Decimal. Se eles não são Hexi Decimal, então vamos jogar este ar. E se eles não existem, isso também vai jogar no ar, a propósito. Então, Então, isto verifica se existe, e se é decimal Hexi e se não atende a essas duas condições, então vamos jogar lá, não atende, atender esses dois condições. Então estamos criando dois campos escondidos aqui onde vamos colocar no seletor e no validador. Isso precisará validar o token quando ah, este formulário é enviado. E então a senha aqui, que ah, a pessoa, a nova senha que a pessoa quer definir. Ok. Então eles vão enviar este formulário e, em seguida, o script de processamento para isso irá verificar e ver se os tokens que eles passaram em são válidos. Ok, então é isso que este formulário faz aqui. E então ele passa essa informação para redefinir o processo dot PHP. Agora a razão, e você percebe a maioria das outras formas que eles se submetem a si mesmos. A razão pela qual eu tenho este envio para um script PHP diferente é duas vezes um para mostrar a você como fazer que dá novamente. E é isso que eles querem deixar claro com todas essas coisas. Eu escrevo este código como um auxílio de treinamento principalmente, e é por isso que sempre adverto as pessoas sobre como usar isso na produção. Isso realmente significa mais para você aprender com ele do que para você usá-lo. E eu realmente não pago. Necessariamente focado demais em ter certeza de que tudo é consistente. Posso fazer algo de uma maneira em uma área e de uma maneira diferente em outra área para que eu possa mostrar as duas coisas. Então, novamente, este é o treinamento primário, mas um para que eu possa mostrar-lhe isso. Mas ser se você começar a tentar misturar nas variáveis get e e verificar para aqueles e seguida, ter também verificando para a variável post ele fica um pouco tipo de recebe um pode ficar um pouco louco Ah, e complicado. E eu acho que desnecessariamente. Então nós só fazemos eu obter verificações aqui, e então nós vamos passá-lo para redefinir processo dot PHP. E é aí que podemos apenas lidar com todo o nosso post em nós. Então ajuda a separar essas duas coisas. Então, se nós viemos aqui para redefinir o processo dot PHP, você pode ver agora isso parece mais normal. Estamos verificando se é um post post dados foi enviado, e se sim, vamos processar. Vamos enviar isso para redefinir a senha. Se nenhum status de publicação foi enviado para esta página, não há razão para que eles estejam nesta página de processo de redefinição, a menos que eles tenham vindo deste formulário. Então, se eles estão visitando isso diretamente, não há nada que possamos fazer por eles. E é por isso que não temos mais bloquear a direita fora de se post nele foi enviado, e nós apenas jogar um erro. Então não há outra razão para eles estarem nesta página. Então, nós executamos este Ah, método de redefinição de senha entrará nos detalhes disso. Nós definimos o status de acordo aqui e, em seguida, aqui em baixo, nós basicamente apenas exibir o status de dados. Ou eles recebem esta mensagem aérea, eles recebem uma mensagem aérea gerada por Reset Password, ou eles recebem uma mensagem de sucesso gerada por reset password. E nós só mostramos isso aqui em baixo. Certo, então essa é a visão geral geral. Agora, vamos entrar em são realmente log na classe. E, novamente, perdemos a senha aqui mesmo. Ah, este é um dos nossos principais métodos e nós redefinimos a senha bem aqui. Então esses são dois métodos principais que precisamos. Olhe através. Então vamos olhar através da perda de senha primeiro. Tudo bem, então se viermos aqui, há senha redefinida, e agora temos muito senha perdida. Então, com senha perdida, a maior coisa com esses tokens é que precisamos apenas ter certeza de que eles são criptográficos Lee seguro para que eles não sejam realmente, realmente fácil cortar o dedo do pé agora. Obviamente, se alguém os receber diretamente do e-mail da pessoa, eles poderão usá-los. Mas nós queremos que nós queremos fazer isso. Então, é difícil para os hackers apenas tentar ir para um formulário de redefinição e tentar adivinhá-los. E isso é o que a maior parte deste código vai ser. Mas para o nosso método de senha perdida, ele leva o post fora de que foi enviado novamente. Lembre-se que o Post Data é, ah, simplesmente vai ser o endereço de e-mail aqui. Isso é tudo o que está sendo submetido. Ah, e então vamos pegar os dados que vamos verificar para ter certeza que o e-mail foi enviado . Se não, vamos jogar no ar. Então vamos checar nosso banco de dados para ver se esse usuário existe. E isso é que fazemos parte de onde estávamos usando o usuário existe, e estamos verificando por e-mail. É por isso que atualizamos esse método baseado em sangria de dados. Se o usuário não existe, então vamos jogar no ar porque não podemos redefinir uma senha para um e-mail ou usuário que não existe. Se acontecer, vamos continuar aqui. E a primeira coisa que fazemos é criar nosso seletor. Nós vamos usar bytes aleatórios seu comprimento de oito, e nós estamos fazendo sido toe hexi decimal. Então estamos criando ah, Hexi decimal. Basicamente, string aqui que vamos usar é o nosso seletor e porque é aleatório cada vez que este este método é executado, vai ser algo diferente. Agora vamos armazená-lo para que seja assim que combinamos tudo. Mas isso é importante que ele não esteja tendo a mesma coisa sendo criada e a forma como bytes aleatórios funciona, você sabe, ele cria algo que é criptográfico Lee seguro para esses propósitos. Estamos fazendo a mesma coisa para token, exceto que estamos criando um que é mais longo. Ah, e nós não estamos fazendo Ah, o feitiço de Binda aqui. Apesar de chegarmos aqui em um segundo. Então isso cria o nosso que essencialmente cria são dois tokens que precisamos. E como, eu meio que disse antes, isso é um pouco como uma chave pública e privada. Embora no nosso caso, você vai mandar os dois. Ah, ambos para o usuário. Mas ter essas duas chaves diferentes ajuda com problemas de tempo e torna mais difícil para alguém tentar entrar e adivinhar isso agora eles têm um palpite, também, e fazê-lo certo e é muito mais, muito mais tempo do que o outro e assim por diante. Então, uma vez que temos esses dois tokens, então precisamos criar rul que vamos enviar para o usuário para redefinir suas senhas. Então estamos usando sprint. Metade que temos são dois espaços reservados. Essa porcentagem s é aqui nossas páginas redefinir ponto PHP. Então, de novo, essa foi essa página de reinicialização aqui que acabamos de olhar. Esse é o que eles realmente vão pousar quando clicarem no link no e-mail. Então é aqui que passamos. Lembre-se que eu disse em nosso arquivo de conflito, nós especificou o nosso u R l para onde este script está instalado. Então aqui é onde estamos usando isso. Isto é ABS. Você é l Então isso vai fazer isso de modo que quando você atualizar esse arquivo de conflito e esse link enviado, ele será enviado para o lugar certo e ele irá para reset dot PHP. Em seguida, vamos usar HT ht TB compilação query. Isto é basicamente construir nossos parâmetros de consulta para nós. E assim, ah, nós passamos em nosso seletor que nós tínhamos criado aqui em cima. Nós passamos em nosso validador e nós executá-lo através sido para Hex para criar um hexi decimal aqui e passando nosso token. Agora é importante saber isso porque ambos estão passando por Been to Hex, mas você vai notar aqui em baixo, há algo que eu quero mostrar a vocês. Quando inserimos isso no banco de dados estavam usando token, que é aqui em cima que não tem sido para hexadecimal executado através. Então, o que enviamos para o banco de dados não é realmente executado através de sido para Hex, mas tem executado através de um hash, então nós hash ele. Mas quando enviamos um e-mail, nós o executamos. Já fui ao inferno. Então, basicamente, o que está indo para o e-mail está sendo enviado através de sido para hexadecimal. Mas o que está acontecendo no banco de dados está sendo hash, então o valor enviado para o endereço de e-mail e o valor armazenado no banco de dados são realmente diferentes. Ok, então novamente, isso é importante de entender. Então você não quer que você quer ter certeza de que seu ah, você é uma coisa que eu estava tentado a fazer foi apenas colocar sido para Hex aqui em cima disse token igual a sido para hexadecimal bytes aleatórios. Mas isso não funcionaria por causa do que estamos fazendo aqui. Estamos usando token diretamente. Ok, então apenas algo para ter em mente que vai aparecer um pouco mais tarde aqui. De modo que isto essencialmente tudo isto. O que ele faz é construir rul com nosso domínio, um reset dot PHP e, em seguida, nossos parâmetros de consulta que precisamos definir para seletor e nosso validador. Então isso nos dá nossa ur l. A próxima coisa que precisamos é de nossa expiração para isso. Então vamos fazer novo dia, data e hora. Agora fazemos um intervalo de dia, o que adiciona uma hora a ele, basicamente. Então este token é é é vai ficar ativo por uma hora. Claro, você pode mudar isso se quiser, certo, certo, você pode vir aqui e mudar a quantidade de horas que você quer que isso fique ativo, mas eu não definiria por muito tempo. E eu diria que na maioria dos casos, se alguém está redefinindo sua senha, provavelmente está fazendo isso bem ali. Então, uma hora provavelmente faz sentido. Certo, assim que tivermos isso, temos tudo o que precisamos. A próxima coisa que vamos fazer é antes de criarmos novos tokens que vão dally qualquer um que já esteja lá dentro. Então, se alguém selecionar redefinir senha e, em seguida, você sabe que eles não chegam a ela por duas horas e, em seguida, eles tentam clicar no link. Eles verão um erro ao tentar redefinir suas senhas para que eles vão e eles vão redefini-la novamente. Eles criarão uma nova senha de redefinição. E o que queremos fazer é quando eles fizerem isso, queremos voltar e totalmente quaisquer antigos que eles tenham no banco de dados para garantir que mantenhamos isso limpo. Nós não temos todos esses tokens toking correndo por aí, então exclua-os. E então o que vamos fazer é primeiro inserir esses dados em nosso banco de dados que você é tabela que nós criamos. E então vamos inserir o e-mail. O seletor nós vamos cortar o token e inseri-lo. E depois estamos a favor do expirar. Estávamos apenas inserindo a data no formato UNIX. Então, um carimbo de data/hora UNIX você poderia fazer data e hora. Mas neste caso em particular novamente, não há exibição das datas. Acho que é mais fácil trabalhar com isso, na minha opinião aqui. Mas eu fiz com o antigo A com o recurso de lembrar de mim Eu mostrei como fazê-lo com horário de data regular. Então você poderia fazer isso também. Mas eu acabei de fazer. Faça o carimbo da próxima vez para mostrar como isso funcionaria. Tudo bem, então o que acabamos com quando fazemos isso é acabar com uma, ah, ah, uma árvore nen em nossa senha. Redefinir dados são tabela de redefinição de senha que tem o token e todos para esse usuário específico por seu e-mail. É hash e como quando expira. Então isso meio que nos define para ser capaz de lidar quando eles clicam no link e enviar nossos formulários . A última coisa, claro, que vamos fazer é enviar o e-mail. Então vamos verificar para ter certeza de que isso foi inserido no banco de dados porque não faz sentido enviar o e-mail se nós realmente não armazenados no banco de dados porque eles não serão capazes de usar o link no e-mail. Então, a primeira coisa que vamos definir o nosso destinatário que é dois vai apenas definir os dois iguais para usar o seu e-mail o assunto para o seu link de redefinição de senha você pode mudar tudo isso se você quiser . A mensagem diz que recebemos uma senha. Redefinir solicitações vinculadas. Sua senha é “golpe”. Uh, etcetera, etc. Aqui está o link de redefinição de senha. E aqui é onde nós realmente passamos no vazamento. E assim fazemos. Ah! Ah, uma etiqueta de rascunho. Passamos o URL aqui, e também estamos apenas exibindo o Você está todo nu aqui. Talvez você possa mudar isso aqui. Mas eu sou um fã de exibir as meninas cru só porque alguns programas de e-mail, o clink pode não ser clicável eles. Eu tenho texto baseado, e então se você exibir o link raw, eles podem simplesmente copiá-lo se precisarem e colá-lo. Então, ah, isso é o que temos aqui. E depois temos este pensamento. E então tudo isso é apenas criar esta mensagem que vai ser enviada em nosso e-mail. Você pode editar isso de acordo. Nossos cabeçalhos temos o nosso a partir deste é onde temos nome de administrador e e-mail de administrador. Temos a nossa resposta para definir como administrador Uh, oops. Na verdade, tem um tipo de e-mail lá. Então nós temos que definir como e-mail de administrador, e então temos nosso tipo de conteúdo definido como HTML basicamente porque estamos usando essas tags de parágrafo para que ele vai fazê-lo para que ele mostra como nós esperávamos para aparecer. E então aqui vamos enviar o e-mail e então vamos executar bem essa função masculina. E se a função masculina correr bem, se for enviada, vamos verificar se foi enviada. Vamos destruir a sessão se eles tiverem uma, qualquer sessão em que estejam. E a razão é basicamente o que o cabelo comum diz. Se eles estiverem redefinindo sua senha, isso significa que se houver pat na sessão atual, a senha com a qual o registro ganha está prestes a ser inválida. Então vamos destruir aquela sessão e fazê-lo voltar a entrar. Então eu acho que isso é importante porque você não quer ter nenhum nous estranho lá em termos de eles estarem logados como um só através de uma senha. Mas eles só mudaram a senha que pode ficar um pouco confuso. Eles são então nós vamos apenas destruir a sessão e fazê-los voltar a entrar, e então nós vamos retornar um status de um ou verdadeiro e nossa mensagem aqui e então você sabe, se alguma dessas coisas tipo de falha ao longo do caminho, Ele vai falhar para esta mensagem de status de falso com esta mensagem aqui. E não estamos fornecendo muita informação aqui porque esta é uma redefinição de senha. Então nós realmente não queremos fornecer ah, muita informação para alguém que pode estar tentando hackear isso. Então mantemos essas mensagens aéreas meio vagas aqui. Então, se voltarmos e olhar para isso quando enviarmos este formulário para senha Los Word, ele vai levar o endereço de e-mail vai verificar se esse usuário existe. Se esse usuário existe, vai criar uma Siri vai criar uma série de tokens de redefinição em nosso dedo do pé da tabela. Lidar com isso e, em seguida, ele vai enviar um e-mail para o usuário com o link que ele precisa. Isso tem os tokens adequados para que eles possam clicar e, em seguida, ir para a página de redefinição e redefinir suas senhas. Então é isso que tudo isso faz. Tudo bem. Em seguida, então é são as senhas de redefinição reais. Então, novamente , ah , bem, nós não temos o link aqui, mas que esta é a página aqui onde eles realmente pegamos seu seletor no validador do conde. Passamos em campos ocultos e processamos a redefinição da senha. Então, se olharmos para isso, estamos recebendo nossos dados postais aqui, e estamos novamente são obrigatórios campos estavam fazendo são obrigatórios. Verifique se EJ há seletor, validador e a senha porque precisamos de todos os três. E se não, nós estamos passando em um ar e você vai notar aqui que eu adicionei algo que você pode considerar adicionar quando você tem algo assim onde você realmente quer saber onde havia um ar Se o usuário alguém entrar em contato com você via suporte disse , Ei, eu não posso redefinir minha senha todos esses ares porque nós não estamos tentando fornecer muita informação para alguém que pode estar tentando hackear isso. Todos estes ares ar o mesmo que usamos o desenvolvedor pode querer saber. Bem, em que ponto ele falhou? Então você vê, eu veracode 123 e 4, então se alguém disser, Ei, eu não posso redefinir minha senha, você poderia dizer, Ei, qual era o código de ar que ele mostrou quando você tinha um problema. Bem, foi um WRKO. Dizia código aéreo três. E agora você é um desenvolvedor. Não, aqui é onde você teve algum tipo de problema para que eu pudesse ser importante para solucionar problemas. E você poderia fazer isso. Talvez só para produção. Ou você poderia deixar isso ao vivo para Ah, quero dizer, para o desenvolvimento. Ou você pode deixá-lo ao vivo quando você continuar, sua vida está sobre seu servidor de produção. Tudo bem, então se todos os campos forem transmitidos no formulário, vamos extraí-los. Então, novamente, extract transforma as chaves dessa matriz em variáveis e define o valor dessa variável para o valor dessa chave. Então, basicamente, o que acabamos aqui com quando extraímos é que temos nossos dados postais definidos para seletor validador senha. Então seletores definido para o que quer que o seletor é valorizado, ele líderes definir o um de um validador é etcetera. Torna só um pouco mais fácil trabalhar conosco. Vamos passar por aqui. Tudo bem, então a próxima coisa que vamos fazer quando tivermos isso é que vamos verificar. Vamos consultar nossa tabela de redefinição de senha e ver se temos isso. Se esse seletor que foi passado existe em nossa tabela de reinicialização, então podemos não ter nenhum aqui, não temos nenhum aqui, mas é aqui que vamos ter esses dados armazenados. E então vamos verificar isso para ver se temos um lá que corresponda ao que foi enviado através do nosso formulário, que veio da página anterior, que veio de ah, que veio em última análise do e-mail. Certo, então vamos verificar e ver se esse seletor existe e se não expirou. Então, se o tempo definido no bloco expirar é maior ou igual ao tempo agora. Então o tempo retorna um timestamp UNIX da hora atual e nós inserimos em nosso banco de dados um timestamp UNIX de quando ele expira. Então estamos basicamente comparando o tempo agora versus o tempo de expiração e vendo se agora, se o tempo de expiração ainda é maior do que o tempo agora, isso significa que o token ainda é válido. Então vamos selecionar e ver se encontramos um. Se não o fizermos. Se os resultados estiverem vazios. Se não encontrarmos um, retornaremos uma mensagem de status. Há um ar processando sua busca, Eric Ho também, porque isso tokens não é válido. Agora não vamos dizer a eles que os tokens não são válidos porque não queremos deixar um hacker saber que isso é tudo o que está acontecendo nos bastidores? Vamos dar a eles esse tipo de declaração de cobertor. Mas sabemos a razão pela qual isso teria acontecido, por causa do código dela. No entanto, se isso existe, então vamos fazê-lo novamente. Este resultado obtém retorna Honore com um elemento nele. Então precisamos pegar o primeiro elemento naquele raio. É aí que os dados realmente existem. Então nós definimos token, igual a resultados, e então nós estamos criando nosso, hum nós estamos basicamente recriando o que armazenamos em nosso banco de dados. Então, se você se lembra, isso é importante. Quando enviamos o validador, também, o através do e-mail, nós o executamos, fomos a hacks, e não fizemos hash. Quando começamos no banco de dados, nós não executá-lo através, foi para hexadecimal, mas nós fizemos hash. Então, novamente, o que foi enviado. O e-mail é diferente do que está realmente no banco de dados. Não podemos comparar esses dois diretamente. Temos que recalcular ah, eles de acordo. Então o que fazemos é pegar o que foi enviado no e-mail e executá-lo através hex para bin. Então, isso vai acontecer quando passarmos. Quando enviamos um e-mail, passamos por Hex. Agora estamos correndo através de Hex para bin, então basicamente desfaz sido para Hex. Então esse é o primeiro passo. Então desfazemos. Estive no feitiço sobre o que era o validador no correio. E então nós o executamos através do mesmo algoritmo de hash e nós vamos ter o mesmo hash volta. 6. Próximos passos: Sou honesto que não há mais. Então online.com, tão pouca limpeza para terminar este curso. Se ainda não o fez, certifique-se de ir para a área de aula. Há uma seção de classe para alguns, alguns passos para você percorrer para este curso. Portanto, certifique-se de que está sob a discussão na guia Projetos que você verá no curso. Além disso, se você entrar no meu perfil, certifique-se de me dar um acompanhamento no meu perfil aqui para que você seja notificado quando eu lançar novos cursos. E também tenho um curso de estilo podcast semanal chamado “Let's Talk freelance”. Então, se você gostaria de ter um tipo de acesso a treinamento contínuo sobre freelancing e negócios on-line e assim por diante. Certifique-se de verificar isso. Vamos falar de curso freelance também. E, finalmente, eu tenho um boletim diário de dicas no meu site em John Morris online.com. Se fores para lá, podes inscrever-te na lista de discussão. Você também será colocado no meu próprio, meu próprio aplicativo móvel, ou você terá acesso a mais de 78 horas de conteúdo gratuito no momento desta gravação relacionada ao freelance e assim por diante também. Então, se você está interessado nisso, BD certeza de verificar isso também. Novamente, esse é John Morris Online.com. Tudo bem. Obrigado por ter assistido à aula. Se gostou, agradeço-lhe por si. Deixe uma crítica e nos vemos no próximo curso.