{"id":22164454,"url":"https://github.com/faustinopsy/login","last_synced_at":"2025-08-02T20:32:58.969Z","repository":{"id":203643420,"uuid":"710086475","full_name":"faustinopsy/login","owner":"faustinopsy","description":"Login com Jwt, padrão MVC e REST - teste na URL abaixo, projeto criado para ensinar como gerenciar perfis distintos com arquitetura desacoplada","archived":false,"fork":false,"pushed_at":"2024-03-21T21:16:59.000Z","size":983,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T16:11:57.707Z","etag":null,"topics":["javascript","moderno","mvc","php","php8","rest","rest-api"],"latest_commit_sha":null,"homepage":"https://ar.rodrigofaustino.com.br/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faustinopsy.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-26T01:52:43.000Z","updated_at":"2023-12-06T02:35:06.000Z","dependencies_parsed_at":"2023-11-08T05:45:00.732Z","dependency_job_id":"2afecc1e-86a4-4fe7-aff3-23f757b3c457","html_url":"https://github.com/faustinopsy/login","commit_stats":null,"previous_names":["faustinopsy/login"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/faustinopsy/login","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2Flogin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2Flogin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2Flogin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2Flogin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faustinopsy","download_url":"https://codeload.github.com/faustinopsy/login/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2Flogin/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268448362,"owners_count":24252019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","moderno","mvc","php","php8","rest","rest-api"],"created_at":"2024-12-02T05:08:06.448Z","updated_at":"2025-08-02T20:32:58.914Z","avatar_url":"https://github.com/faustinopsy.png","language":"PHP","readme":"# Sistema de Login com JWT\n\nSistema de autenticação simples utilizando JSON Web Tokens (JWT).\n\n\n## Requisitos\n\n- PHP\n- Biblioteca `firebase/php-jwt`\n\n## Instalação\n\nClone o repositório depois instale a dependencia abaixo\nInstale a biblioteca via composer:\n```php\ncomposer require firebase/php-jwt\ncomposer require bramus/router\ncomposer update\n```\n## Uso\nApós a instalçao das dependências acima mencionadas, uma para gerenciar a criação e validação do token, a outra é para gerenciar rotas semelhante o que acontece com os principais frameworks, onde é capturado o metodo e o recurso e direciona para a função no contralador especifico.\n\n### Login\n\nAo realizar o login, um token JWT é gerado para o usuário com base em suas credenciais.\no frontend recebe o token caso a autenticação seja bem sucedida, e o javascript \"x.js\" a cada 1 minuto faz uma requisição para verificar o token e verificar as telas autorizadas pela passoa logada.\n\n```php\n$key = \"YOUR_SECRET_KEY\";\n$payload = [\n \"iss\" =\u003e \"localhost\",\n \"aud\" =\u003e \"localhost\",\n \"iat\" =\u003e time(),\n \"exp\" =\u003e time() + 3600,  // Expira em 1 hora\n \"sub\" =\u003e \"user@email.com\"\n];\n\n$jwt = JWT::encode($payload, $key);\n```\nValidação de Token\nPara validar o token recebido em requisições subsequentes:\n```php\n$key = \"YOUR_SECRET_KEY\";\n\ntry {\n    $decoded = JWT::decode($token, $key, ['HS256']);\n    // Token é válido\n} catch(Exception $e) {\n    // Token inválido\n}\n```\n\n## Estrutura do Projeto\nbackend/Controller/UsuarioController.php: Contém a lógica para gerar e validar o JWT.\nbackend/Router/: Roteamento e processamento das requisições HTTP.\n## Como Usar\n- Login\nPara fazer login, envie uma requisição POST para backend/Router/ com os campos email e senha.\nSe for bem-sucedido, você receberá um JWT que será usado para futuras autenticações, salvando em sessionStorage.\n\n```js\n    const response = await fetch(urlBase+'backend/Router/login', {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({ email, senha: password,lembrar })\n    });\n    const data = await response.json();\n    if (data.status) {\n        sessionStorage.setItem('token', data.token);\n        window.location.href = \"index.html\"; \n    }\n```\n- Validar Token\nPara validar o token, envie uma requisição GET para backend/Router/loginRouter.php com o token no cabeçalho de Autorização.\nO token será validado e, se ainda estiver válido, a resposta será positiva.\n\n## Bônus (recursos adicionais)\n\n- Os javascripts cards e times fazem uma busca fetch para um json que está estruturado, e o javascript ler o conteúdo e monta os cards, essa parte foi criada para mostrar a manipulação do DOM sem um banco de dados\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaustinopsy%2Flogin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaustinopsy%2Flogin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaustinopsy%2Flogin/lists"}