Не могу войти или зарегистрироваться с помощью паспорта коа с auth0. Я получаю Not Found и перенаправляю на домашнюю страницу - PullRequest
0 голосов
/ 29 апреля 2020

Вот мой код подачи и настройки; не обращайте внимания на звездочку, это не относится к информации

import "@babel/polyfill";
import dotenv from "dotenv";
import Koa from "koa";
import next from "next";
import Router from "koa-router";
import session from "koa-session";
import passport from "koa-passport";
import Auth0Strategy from "passport-auth0";
import authRoutes from "./auth-routes";

dotenv.config();
const port = parseInt(process.env.PORT, 10) || 8081;
const dev = process.env.NODE_ENV !== "production";
const app = next({
  dev,
});
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = new Koa();
  const router = new Router();
  server.keys = ["****"];

  server.use(session(server));

  // 3 - configuring Auth0Strategy
  const auth0Strategy = new Auth0Strategy(
    {
      domain: process.env.AUTH0_DOMAIN,
      clientID: process.env.AUTH0_CLIENT_ID,
      clientSecret: process.env.AUTH0_CLIENT_SECRET,
      callbackURL: process.env.AUTH0_CALLBACK_URL,
    },
    function (accessToken, refreshToken, extraParams, profile, done) {
      return done(null, profile);
    }
  );

  // 4 - configuring Passport
  passport.use(auth0Strategy);
  passport.serializeUser((user, done) => done(null, user));
  passport.deserializeUser((user, done) => done(null, user));

  // 5 - adding Passport and authentication routes
  server.use(passport.initialize());
  server.use(passport.session());
  server.use(authRoutes.routes());

  // 6 - you are restricting access to some routes
  const restrictAccess = (ctx, next) => {
    console.log("ctx req isAuth", ctx.isAuthenticated());
    if (!ctx.isAuthenticated()) return ctx.redirect("/login");
    next();
  };

  //   server.use("/****", restrictAccess);

  router.get("/****/:username", restrictAccess, async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
  });

  router.get("*", async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
  });

  server.use(router.allowedMethods());
  server.use(router.routes());
  server.listen(port, () => {
    console.log(`> Ready on http://localhost:${port}`);
  });
});

, и вот мои маршруты авторизации в отдельном файле

import Router from "koa-router";
import passport from "koa-passport";

const router = new Router();

router.get(
  "/login",
  passport.authenticate("auth0", {
    scope: "openid email profile",
  }),
  (ctx) => ctx.redirect("/")
);

router.get("/callback", (ctx, next) => {
  passport.authenticate("auth0", (err, user) => {
    if (err) return next(err);
    if (!user) return ctx.redirect("/login");
    ctx.logIn(user, (err) => {
      if (err) return next(err);
      console.log("hit redirect", user);

      // ctx.redirect("/");
    });
  })(ctx, next);
});

router.get("/logout", (ctx) => {
  ctx.logout();

  const { AUTH0_DOMAIN, AUTH0_CLIENT_ID, BASE_URL } = process.env;
  ctx.redirect(
    `https://${AUTH0_DOMAIN}/logout?client_id=${AUTH0_CLIENT_ID}&returnTo=${BASE_URL}`
  );
});

export default router;

Теперь, когда я регистрируюсь, пользователь создается на мое приложение в auth0. Но когда я вхожу или регистрируюсь, в браузере остается сообщение «Не найдено», и это URL-адрес http://localhost:8081/callback?code=-Z5JJjQewBIhLju_&state=pCzRyFRqGwgwsZw10IFCqHoA Я также хотел бы получить access_token, поэтому, пожалуйста, посоветуйте, как мне получить эту информацию, а также войдите и зарегистрируйтесь для работы. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...