Skip to content

odevhenrique/Oauth2.0-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BytePress — Autenticação OAuth 2.0 com GitHub

Aplicação web desenvolvida em Django que demonstra o fluxo completo de autenticação OAuth 2.0 utilizando o GitHub como provedor. Ao fazer login, o usuário é redirecionado para o GitHub, autoriza o acesso e retorna autenticado para a plataforma, sem a necessidade de cadastro manual ou senha.


Visão geral

O projeto simula uma plataforma de curadoria de notícias tech chamada BytePress. Ele serve como estudo prático do protocolo OAuth 2.0, usando a biblioteca django-allauth para gerenciar todo o fluxo de autenticação social.

Fluxo de autenticação:

Usuário → Clica em "Continuar com GitHub"
       → Redirecionado para github.com/login/oauth/authorize
       → Autoriza o app no GitHub
       → GitHub redireciona para /accounts/github/login/callback/
       → django-allauth valida o code + state
       → Sessão criada → Usuário na Home

Tecnologias

Tecnologia Versão Uso
Python 3.x Linguagem base
Django 6.0.5 Framework web
django-allauth 65.17.0 OAuth 2.0 / Social Auth
SQLite Banco de dados
python-decouple 3.8 Variáveis de ambiente
HTML/CSS Interface (dark theme)

Funcionalidades

  • Login via GitHub OAuth 2.0 (sem senha)
  • Proteção de rotas com @login_required
  • Logout com redirecionamento para a tela inicial
  • Dropdown de usuário na navbar
  • Interface responsiva com tema escuro
  • Feed de notícias tech (layout de demonstração)

Pré-requisitos

  • Python 3.10+
  • Conta no GitHub para criar o OAuth App
  • Git

Configuração do GitHub OAuth App

Antes de rodar o projeto, você precisa registrar um OAuth App no GitHub:

  1. Acesse github.com/settings/developers
  2. Clique em New OAuth App
  3. Preencha os campos:
Campo Valor
Application name BytePress (ou qualquer nome)
Homepage URL http://localhost:8000
Authorization callback URL http://localhost:8000/accounts/github/login/callback/
  1. Clique em Register application
  2. Copie o Client ID e gere um Client Secret

Instalação

1. Clone o repositório

git clone https://github.com/seu-usuario/oauth2.0.git
cd oauth2.0

2. Crie e ative o ambiente virtual

python -m venv venv

# Windows
venv\Scripts\activate

# Linux/macOS
source venv/bin/activate

3. Instale as dependências

pip install -r requirements.txt

4. Configure as variáveis de ambiente

Copie o arquivo de exemplo e preencha com suas credenciais:

cp .env.example .env

Edite o .env:

SECRET_KEY=sua-secret-key-django-aqui
CLIENT_ID=seu-github-client-id
SECRET=seu-github-client-secret

Para gerar uma SECRET_KEY segura:

python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

5. Execute as migrações

python manage.py migrate

6. Inicie o servidor

python manage.py runserver

Acesse: http://localhost:8000


Estrutura do projeto

oauth2.0/
├── setup/                  # Configurações do projeto Django
│   ├── settings.py         # Configurações principais
│   ├── urls.py             # Roteamento raiz
│   ├── wsgi.py
│   └── asgi.py
├── tech/                   # App principal
│   ├── views.py            # Views: index (login) e home (protegida)
│   ├── urls.py             # Rotas da app
│   ├── models.py
│   └── apps.py
├── templates/              # Templates HTML
│   ├── index.html          # Tela de login
│   ├── home.html           # Tela principal (pós-login)
│   └── static/
│       ├── login.css
│       └── home.css
├── .env                    # Variáveis de ambiente (não versionado)
├── .env.example            # Exemplo de variáveis necessárias
├── .gitignore
├── manage.py
└── requirements.txt

Rotas disponíveis

Rota View Descrição
/ index Tela de login
/home home Feed principal (requer login)
/accounts/github/login/ allauth Inicia o fluxo OAuth
/accounts/github/login/callback/ allauth Callback do GitHub
/accounts/logout/ allauth Logout
/admin/ Django Admin Painel administrativo

Variáveis de ambiente

Variável Descrição
SECRET_KEY Chave secreta do Django
CLIENT_ID Client ID do GitHub OAuth App
SECRET Client Secret do GitHub OAuth App

Configurações relevantes (settings.py)

# Redireciona para /home após login bem-sucedido
LOGIN_REDIRECT_URL = '/home'

# Redireciona para / após logout
LOGOUT_REDIRECT_URL = '/'

# Permite iniciar o fluxo OAuth via GET (sem formulário intermediário)
SOCIALACCOUNT_LOGIN_ON_GET = True

# Permite logout direto via GET
ACCOUNT_LOGOUT_ON_GET = True

# Necessário para o callback OAuth funcionar corretamente (cross-site redirect)
SESSION_COOKIE_SAMESITE = 'Lax'

Problemas conhecidos

Erro "Falha no login de terceiros" após logout Causado por SESSION_COOKIE_SAMESITE restritivo. Já corrigido nas configurações com 'Lax'. Caso persista, limpe os cookies do browser e tente novamente.


Segurança

  • O arquivo .env está listado no .gitignore e nunca deve ser commitado
  • Em produção, configure DEBUG = False e ALLOWED_HOSTS com o domínio real
  • A SECRET_KEY deve ser única por ambiente (desenvolvimento, produção)
  • Revogue e regenere o Client Secret do GitHub se ele for exposto

Autor

Desenvolvido por @odevhenrique

About

Projeto Django com Autenticação Oauth 2.0

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors