ClickURL / py-clickurls

0 stars 0 forks source link

ShortURL з авторизацією #2

Open YaroslavPodorvanov opened 1 year ago

YaroslavPodorvanov commented 1 year ago

Побажання

  1. Написати власну реалізацію OAuth2 для провайдерів GitHub, GitLab, Bitbucket та Google на основі документації та інших бібліотек, відповідно потрібно розібратись як працює OAuth2 та вміти розповісти
  2. Зберігати в БД email та username з провайдерів
  3. Username може порізному називатись у провайдерів як login або інакше
  4. Після першої авторизації ми створюємо користувача у таблицях users та user_social_profiles
  5. Якщо користувач авторизувався з нового провайдера за email-ом який в нас існує в БД то створюємо лише в user_social_profiles
  6. Сесію зберігати в JWT (тільки user_id), також варто написати свою просту реалізацію

Приклад схеми БД:

CREATE TYPE SOCIAL_PROVIDER AS ENUM (
    'github',-----    -- developers       -- use      -- email = true
    'gitlab',-----    -- developers       -- use      -- email = true
    'bitbucket',--    -- developers       -- use      -- email = true
    'figma',------    -- designers        -- @todo
    'dribbble',---    -- designers        -- use      -- email = false
    'behance',----    -- designers        -- none provider
    'linkedin',---    -- business         -- use      -- email = true
    'xing',-------    -- business         -- @todo
    'google'------    -- global           -- use      -- email = true
    );
-- stackoverflow PROVIDER https://api.stackexchange.com/docs/authentication

CREATE TABLE users
(
    id         SERIAL PRIMARY KEY,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL,
    updated_at TIMESTAMP WITH TIME ZONE NOT NULL
);

CREATE TABLE user_social_profiles
(
    id         SERIAL PRIMARY KEY,
    user_id    INT                      NOT NULL REFERENCES users (id),
    provider   SOCIAL_PROVIDER          NOT NULL,
    social_id  VARCHAR                  NOT NULL,
    email      VARCHAR                  NOT NULL,
    username   VARCHAR                  NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL,
    updated_at TIMESTAMP WITH TIME ZONE NOT NULL
);

CREATE INDEX EMAIL_INDEX ON user_social_profiles (email);
CREATE UNIQUE INDEX PROVIDER_SOCIAL_UNIQUE ON user_social_profiles (provider, social_id);
DROP TABLE user_social_profiles;
DROP TABLE users;

DROP TYPE SOCIAL_PROVIDER;

Документації

GitHub

GitLab

Bitbucket

Google

Додатково

MykhailoRospopchuk commented 1 year ago

Чи треба передбачити можливість створення неавторизованим юзером url-лів і якщо він авторизується то ці url йому підтягуються в його акаунт? Якщо це відбувається за одну сесію. Так як на хотлані або розетці, можна назбирати товари в корзину, потім авторизуватися і воно підтягується

YaroslavPodorvanov commented 1 year ago

Я думаю для початку можна пропустити