Кастомная аутентификация (OAuth2) для Parse-сервера в докере - PullRequest
2 голосов
/ 17 октября 2019

Итак, как следует из названия, я ищу способ интегрировать свою собственную службу аутентификации в сервер синтаксического анализа, который устанавливается внутри контейнера докера. Эта аутентификация в основном является реализацией OpenID KeyCloak.

Дело в том, что у меня нет (и было бы лучше, если бы моя архитектура этого не делала), чтобы сервер синтаксического анализа обслуживался с помощью express на моей локальной машине.

До сих пор я пытался найти в Интернете, прочитать проблемы, прочитать документы сервера разбора на JavaScript, а также руководство и другие материалы, чтобы узнать, как мне этого добиться.

Кажется, не имеет значения, что я делаю, в конце каждого теста я получаю 252 This authentication method is unsupported ошибку! (это происходит, даже если я использую facebook, oauth, oauth2 и т. д.).

Итак, прямо сейчас, сервис docker-compose выглядит так:

    parse-server:
        image: parseplatform/parse-server
        ports:
            - "${SERVER_PORT}:1337"
        restart: "always"
        volumes:
            - ./server/parse/custom-auth:/parse-server/custom-auth
        depends_on: 
            - mongodb
        links:
            - mongodb:mongo
        environment:
            - PARSE_SERVER_APPLICATION_ID=${APP_ID}
            - PARSE_SERVER_MASTER_KEY=${MASTER_KEY}
            - PARSE_SERVER_DATABASE_URI=mongodb://mongo:${MONGO_PORT}/dev
            - PARSE_SERVER_START_LIVE_QUERY_SERVER=1
            - PARSE_SERVER_LIVE_QUERY={"classNames":${LIVE_QUERY_CLASSES}}
            - PARSE_SERVER_MOUNT_GRAPHQL=${GQL_API}
            - PARSE_SERVER_MOUNT_PLAYGROUND=${GQL_PLAYGROUND}
            - PARSE_SERVER_AUTH_PROVIDERS={"swwwan-mail-auth":{"module":"/parse-server/custom-auth/swwwan-mail-auth/index.js"}}

и часть входа / регистрации:

export const loginWithParse = async (account: IUserColumnTypes) => {
    if (account.username === null || account.password === null) {
        throw "validation failed";
    }

    // @ts-ignore
    const loggedIn = await Parse.User.logInWith("swwwan.mail-auth", {
        authData: {
            id: "",
            access_token: "",
        },
    });

    console.log({ loggedIn });

    //return await Parse.User.logIn(account.username, account.password);
};

другая альтернатива для входа / регистрации:

export const loginWithParse = async (account: IUserColumnTypes) => {
    if (account.username === null || account.password === null) {
        throw "validation failed";
    }

    const u = new Parse.User();

    u._linkWith("swwwan-mail-auth", {
        authData: {
            id: "tester",
            access_token: "sample_access_token",
        },
    })
    .then(res => console.log(res))
    .catch(e => console.log(e));

    //return await Parse.User.logIn(account.username, account.password);
};

ОБНОВЛЕНИЕ: с помощью второй альтернативы, я на самом деле получаюошибка:

error: Parse error: Invalid key name: authData.swwwan-mail-auth.id {"code":105,"stack":"Error: Invalid key name: authData.swwwan-mail-auth.id

Есть ли способ заставить его работать? возможно я что-то здесь упускаю.

tnx:)

1 Ответ

1 голос
/ 23 октября 2019
  1. обратите внимание, что «свисание» в функциях ссылки будет исключено в следующем 2.9 выпуске пакета Parse JS SDK

  2. Извините, что документация еще не лучше. Будет еще немного работы

  3. То, что вы пытаетесь выполнить, выполнимо!

  4. Ваша последняя ошибка - дать один большой ключ: имяВаш адаптер не может содержать символы, которые недопустимы для идентификатора JavaScript. В этом случае - вызывает проблему, поскольку при сохранении его в базе данных в качестве ключа используется имя адаптера.

Юнит-тесты часто являются лучшей документацией. и вы можете найти их полезными в этом случае.

См .:

...