Как я могу получить доступ к контексту AccountsServer (accounts-js) с помощью модулей graphql? - PullRequest
0 голосов
/ 19 октября 2019

В своем проекте я использую модули account-js и graphql. Как применить данные пользователя, вошедшего в учетные записи-js в соответствии с моим провайдером и распознавателем?

Именно то, что я хочу сделать, - это получить учетные данные вошедшего в систему пользователя из службы, предоставляемойсчета-JS. т.е. доступ к другой информации, такой как идентификатор, профиль. Мне нужно иметь такой контекст, как context.user.id. Я не смог получить его.

users.providers.ts

import { Injectable } from "@graphql-modules/di";
import { Db, Collection, ObjectID } from "mongodb";
import { UserDbObject, CreateUserInput } from '@models';
import { AccountsServer, ServerHooks } from '@accounts/server';

@Injectable()
export class UsersProvider {
    collection: Collection<UserDbObject>;
    constructor(db: Db) {
        this.collection = db.collection('users');
    }
    getAllUsers() {
        return this.collection.find().toArray();
    }
    getUserById(id: string) {
        return this.collection.findOne({ _id: new ObjectID(id) });
    }
    getUserByToken(id: string) {
        return this.collection.findOne({ _id: new ObjectID(id) });
    }
    getUserByUsername(username: string) {
        return this.collection.findOne({ username: username });
    }
    getUsersCount() {
        return this.collection.countDocuments();
    }
    async updateUser(id: string, user: CreateUserInput): Promise<UserDbObject> {
        const _id = new ObjectID(id);
        await this.collection.updateOne({ _id }, { $set: user });
        return {
            _id,
            ...user
        } as UserDbObject;
    }
    async deleteUser(id: string, user: CreateUserInput): Promise<UserDbObject> {
        const _id = new ObjectID(id);
        await this.collection.deleteOne({ _id });
        return {
            _id,
            ...user
        } as UserDbObject;
    }
}

query.resolvers.ts

import { QueryResolvers } from "@models";
import { UsersProvider } from "../providers/users.provider";


export const Query: QueryResolvers = {
    allUsers: (root, args, { injector }) => injector.get(UsersProvider).getAllUsers(),
    userById: (_, { id }, { injector }) => injector.get(UsersProvider).getUserById(id),
    userByUsername: (_, { username }, { injector }) => injector.get(UsersProvider).getUserByUsername(username),
    getUserByToken: (_, { id }, { injector }) => injector.get(UsersProvider).getUserByToken(id)
}
...