#node.js #express #authentication #passport.js #basic-authentication
#node.js #экспресс #аутентификация #passport.js #базовая аутентификация
Вопрос:
Я хотел бы использовать базовую аутентификацию для своих маршрутов API, но также разрешать пользователям получать доступ к API в браузере с помощью стратегии локальной аутентификации. Мой промежуточный продукт выглядит так:
router.get("/Login", (req: Request, res: Response, next: NextFunction) => {
let test = req.flash("loginMessage");
res.render("Login", { message: test });
});
// Local authentication for user login
router.post(
"/Login",
passport.authenticate("local-login", {
failureRedirect: config.urlExtension "/Login", // redirect back to the signup page if there is an error
failureFlash: true, // allow flash messages
})
);
// Basic authentication for API routes
router.all("/api/*", passport.authenticate("basic", { session: false }));
router.all("*", connectensurelogin.ensureLoggedIn(`${config.urlExtension}/Login`))
Итак, для маршрута аутентификации API я бы хотел обойти базовую аутентификацию, если локальная аутентификация уже достигнута путем входа в систему.
Ответ №1:
Я обнаружил, что вы можете вернуть вызов маршруту аутентификации изнутри внешнего маршрута с помощью этого условия следующим образом:
// Basic authentication for API routes
router.all("/api/*", (req, res, next) =>
req.isAuthenticated()
? next()
: passport.authenticate("basic", { session: false })(req, res, next),
);