Вот мой код подачи и настройки; не обращайте внимания на звездочку, это не относится к информации
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, поэтому, пожалуйста, посоветуйте, как мне получить эту информацию, а также войдите и зарегистрируйтесь для работы. Спасибо