Как реализовать Github Oauth с состоянием?Javascript

Форум по Javascript
Ответить
Anonymous
 Как реализовать Github Oauth с состоянием?

Сообщение Anonymous »

У меня есть два маршрута Python, которые позволяют моему интерфейсу React авторизоваться с помощью Github Oauth. Происходит это так:
  • Пользователь интерфейса переходит на BACKEND_URL/api/v1/oauth/github со страницы FRONTEND_URL/login< /li>
    Бэкэнд возвращает перенаправление на https://github.com/login/oauth/authoriz ... user:email
  • Frontend перенаправляет на Github и получает код в FRONTEND_URL/login?app=github&code=CODE
  • Затем useEffect извлекает BACKEND_URL/api/v1/oauth/github/access?code=CODE и получает токен доступа
Я новичок в Oauth, у меня правильная реализация? Я спрашиваю, потому что сейчас пытаюсь добавить состояние в запросы Oauth. Но как мне это сделать?
Код интерфейса:
useEffect(() => {
const code = searchParams.get("code");
const app = searchParams.get("app");
if (!code || !app) {
return;
}
axios.get(`${BACKEND_URL}/api/v1/oauth/${app}/access?code=${code}`);
}, []);

Login with GitHub

Верхний код:
@app.get('/api/v1/oauth/github')
def github():
return RedirectResponse("https://github.com/login/oauth/authoriz ... user:email", status_code=307)

@app.get('/api/v1/oauth/github/access')
def github_access(code: str):
r = requests.post(f"https://github.com/login/oauth/access_t ... code={code}")
...
return "token"

Пытался узнать ответ в чате gpt. Но он предложил использовать вариант ниже. Но это выглядит странно. Это хорошая практика?
state_storage = {}

@app.get('/api/v1/oauth/github')
def github():
state = str(uuid.uuid4())
state_storage[state] = True
return RedirectResponse("https://github.com/login/oauth/authoriz ... user:email", status_code=307)

@app.get('/api/v1/oauth/github/access')
def github_access(code: str):
if state not in state_storage:
raise HTTPException(status_code=400)

del state_storage[state]

r = requests.post(f"https://github.com/login/oauth/access_t ... code={code}")
...
return "token"


Подробнее здесь: https://stackoverflow.com/questions/793 ... with-state
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»