использовать облачный код parse-сервера для аутентификации в facebook - PullRequest
0 голосов
/ 08 октября 2018

Я интегрировал Apollo GraphQL с parse-сервером, используя облачный код.Теперь я хотел бы показать мутацию аутентификации (в облачном коде), которая примет facebook authData и аутентифицирует пользователя, чтобы он мог вернуть sessionToken.

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

, чтобы показать большездесь подробно описывается, как выполняется интеграция https://github.com/ciekawy/parse-server-back4app-graphql-boilerplate

, и чтобы не помещать просто ссылку, app.js в папке cloud выглядит как

var fs = require("fs");
var path = require("path");

var apollo_server_express = require("apollo-server-express");
var graphql_tools = require("graphql-tools");
var bodyParser = require("body-parser");
var cors = require("cors");
var resolvers = {
    Query: {
        hello() { return "Hello world!"; }
    }
};

var schema = graphql_tools.makeExecutableSchema({
    typeDefs: fs.readFileSync(path.join(__dirname, './graphql/schema.graphql'), 'utf8'),
    resolvers: resolvers
});

app.use('/graphql', cors(), bodyParser.json(), apollo_server_express.graphqlExpress({ schema: schema }));
app.use('/graphiql', apollo_server_express.graphiqlExpress({
    endpointURL: '/graphql'
}));

и т. д. для resolvers Я хотел бы добавить

Mutation: {
  authenticate(obj, args, context) {
     // here call some parse-server link with
  } 
}

Я пытался использовать linkWith по-разному, но безуспешно.

ОБНОВЛЕНИЕ: согласно обсуждениям на сервере синтаксического анализаgithub то, что я пытаюсь сделать, может даже не поддерживаться.С лучшим пониманием внутренних функций я мог бы открыть билет там.

Два возможных обходных пути, которые я вижу (хотя я не был бы счастлив с ними)

  1. просто используйте REST дляoauth signup / login (основным недостатком здесь является невозможность атомарной инициализации учетной записи - т. е. создавать дополнительные структуры пользовательских данных, а другой - невозможность полностью перейти на GraphQL)

  2. сделатьобратный вызов REST из облачного кода; мутация GraphQL в себя

1 Ответ

0 голосов
/ 18 октября 2018

ОБНОВЛЕНИЕ : в частности, для GraphQL - parse-server, так как в v3.6.0 появилась встроенная поддержка GraphQL для всех API-интерфейсов parse-сервера.Это означает, что мутация аутентификации GraphQL из коробки.Кроме того, начиная с версии 3.7.2, он также предлагает поддержку пользовательских схем, сопоставленных с облачным кодом / облачными функциями.

Решение для нижеприведенного решения все еще действует для универсального облачного кода.

ОРИГИНАЛЬНЫЙ ОТВЕТ:

На данный момент я закончил выполнять внутренний вызов HTTP изОблачный код для себя - вот если кто-то захочет продолжить в той же ситуации.

async function authenticateWithFacebook({userProfile, ...authData}) {
    try {
        const response: HttpResponse = (await httpRequest({
            url: 'https://local-parse-server/users/',
            body: authData,
            method: 'POST',
            headers: {
                'Content-Type': 'application/json', // without this line return error is about missing user or password
                'X-Parse-Application-Id': APPLICATION_ID,
                'X-Parse-REST-API-Key': REST_API_KEY,
                'X-Parse-Revocable-Session': 1
            }
        }));
        const { data: { sessionToken }} = response;
        // here we can also do Parse.User.become(sessionToken)
        return sessionToken;
    } catch (e) {
        console.error('error during authentication', e);
    }
}

Силл будет приветствовать решение без обратной связи http-вызова.

...