PostGraphile:makeExtendSchemaPlugin 中的 pgSettings user.id

问题描述

是否可以在 PostGraphile 插件中访问 pgSettings,特别是 makeExtendSchema?这是我的中间件:

app.use(
    postgraphile(
        process.env.DATABASE_URL,"public",{
            watchPg: true,classicIds: true,pgSettings: (req) => {
                if (req.headers.cookie) {
                    const cookies = cookie.parse(req.headers.cookie);
                    return {
                        'user.id': cookies['next-auth.session-token']
                    }
                }
                return;
            },appendplugins: [require('./add-cookie-plugin')]
        }
    )
);

我想要一个插件,将 userId 添加到每个突变中,因为它在 cookie 中,我无法在 graphql 负载中发送它。如果我想要 sql 命令,我看到 pg 可用。只想知道该设置是否已经可用:

const { makeExtendSchemaPlugin,gql } = require("graphile-utils");


module.exports = makeExtendSchemaPlugin(build => {

  const { pgsql: sql,inflection } = build;


  return {
    typeDefs: gql`
      extend type Query {
        userId: Int
      }
    `,resolvers: {
      Query: {
        async userId() {
          return // current_setting('user.id',true)
        },},}
});

解决方法

additionalGraphQLContextFromRequest 很棒。但我必须创建整个解析器。相反,我创建了一个 custom mutation

CREATE FUNCTION public.create_row(content text)
RETURNS public.rows
AS $$
  INSERT INTO public.rows (user_id,content)
    SELECT u.user_id,content FROM users u JOIN sessions s ON u.user_id=s.user_id WHERE s.session_token = current_setting('user.id',true)
  RETURNING *;
$$ LANGUAGE sql VOLATILE STRICT;