Переменная UserId не сохраняется в файлах cookie Express-Session - PullRequest
0 голосов
/ 05 ноября 2018

Я следую за уроками Бена Авада на YouTube. Я столкнулся с некоторой проблемой при передаче идентификатора пользователя в сеанс. Это, кажется, не сохраняется по какой-то причине. Разрешение входа в систему работает. Только мой распознаватель терпит неудачу. Когда я запускаю распознаватель me, он возвращает нуль, а не объект «me».

Я также проверил код для использования Express-сессии в качестве промежуточного программного обеспечения, и, кажется, тоже хорошо

Объект сеанса в контексте внутри распознавателя me не содержит userId. Возвращает неопределенное

Кто-нибудь следит за уроками Бена, столкнулся со следующей проблемой и сумел ее исправить? Любые указатели приветствуются. Спасибо

Я отправил свои коды на github, если кому-то понадобится дополнительная информация коды на github

Love

startServer.ts

  // Session Middleware
  server.express.use(
    session({
      store: new RedisStore({
        client: redis as any,
        prefix: redisSessionPrefix
      }),
      name: "qid",
      secret: SESSION_SECRET,
      resave: false,
      saveUninitialized: false,
      cookie: {
        httpOnly: true,
        secure: process.env.NODE_ENV === "production",
        maxAge: 1000 * 60 * 60 * 24 * 7 // 7 days
      }
    })
  );

распознаватели логина

import * as bcrypt from "bcryptjs";

import { User } from "./../../entity/User";
import { ResolverMap } from "./../../types/graphql-utils";
import {
  invalidLogin,
  confirmEmailError,
  forgotPasswordLockedError
} from "./errorMessages";
import { userSessionIdPrefix } from "../../constants";

const errorResponse = [
  {
    path: "email",
    message: invalidLogin
  }
];

export const resolvers: ResolverMap = {
  Query: {
    bye2: () => {
      return "Bye";
    }
  },
  Mutation: {
    login: async (
      _,
      { email, password }: GQL.ILoginOnMutationArguments,
      { session, redis, req }
    ) => {
      // Check if user exists
      const user = await User.findOne({ where: { email } });

      // if no user found, return error message
      if (!user) {
        return errorResponse;
      }

      // if user has not confirmed email, return error message
      if (!user.confirmed) {
        return [
          {
            path: "email",
            message: confirmEmailError
          }
        ];
      }

      // if user has forgot password locked, return error message
      if (user.forgotPasswordLocked) {
        return [
          {
            path: "email",
            message: forgotPasswordLockedError
          }
        ];
      }

      // Check if login password is valid
      const valid = await bcrypt.compare(password, user.password);

      // if wrong password, return error message
      if (!valid) {
        return errorResponse;
      }

      console.log("Login session before set ", session);
      // Set Cookie on Successful Login
      session.userId = user.id;
      console.log("Login session after set", session.userId);

      // Add to Session List
      if (req.sessionID) {
        console.log("session Id", req.sessionID);
        console.log("userId ", user.id);
        await redis.lpush(`${userSessionIdPrefix}${user.id}`, req.sessionID);
      }

      return null;
    }
  }
};

me resolvers.ts

import { ResolverMap } from "../../types/graphql-utils";
import { User } from "../../entity/User";
import { createMiddleware } from "../../utils/createMiddleware";
import middleware from "./middleware";

export const resolvers: ResolverMap = {
  Query: {
    me: createMiddleware(middleware, (_, __, { req, session }) => {
      return User.findOne({ where: { id: session.userId } });
    })
  }
};

middleware.ts

import { Resolver } from "../../types/graphql-utils";

export default async (
  resolver: Resolver,
  parent: any,
  args: any,
  context: any,
  info: any
) => {
  // middleware
  const result = await resolver(parent, args, context, info);
  // afterware

  return result;
};

createMiddleware.ts

import { Resolver, GraphQLMiddlewareFunc } from "../types/graphql-utils";

export const createMiddleware = (
  middlewareFunc: GraphQLMiddlewareFunc,
  resolverFunc: Resolver
) => (parent: any, args: any, context: any, info: any) =>
  middlewareFunc(resolverFunc, parent, args, context, info);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...