首页 文章

使用解析服务器 Cloud 代码进行facebook身份验证

提问于
浏览
0

我已经使用 Cloud 代码将Apollo GraphQL与解析服务器集成在一起 . 我现在想公开身份验证变异(在 Cloud 代码中),它将接受facebook authData 并对用户进行身份验证,以便它可以返回 sessionToken .

GraphQL在这里是次要的 - 它只是一个上下文来解释为什么我需要在 Cloud 代码中完成所有这些(我也使用parse-server托管服务提供商并使用 Cloud 代码是使GraphQL工作的唯一合理方法) .

在这里显示更多细节是如何完成集成https://github.com/ciekawy/parse-server-back4app-graphql-boilerplate

并且不要只放一个链接,_1805662_在 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 ,但没有成功 .

更新:根据对parse-server's github的讨论,我想要做的事情甚至可能都不受支持 . 通过更好地了解内部结构,我可以在那里开票 .

我看到两种可能的解决方法(虽然我对它们不满意)

  • 只是使用REST进行oauth注册/登录(这里的主要缺点是无法提供原子帐户初始化 - 即创建额外的用户数据结构,另一个是无法完全迁移到GraphQL)

  • 执行从 Cloud 代码GraphQL变异到自我的环回REST调用

1 回答

  • 0

    至于现在,我最终做了从 Cloud 代码到内部的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);
        }
    }
    

    Sill会欢迎没有环回http调用的解决方案 .

相关问题