Frontend - это Angular6 SPA, обслуживаемый экспрессом.Express используется с passport.js для аутентификации на провайдере аутентификации.
Passport.js работает нормально - обмен токенами и т. Д. Работает отлично.Кажется, моя проблема заключается в маршрутизации:
Страница login.html, которая обслуживается authenticationGuard как часть моего Angular SPA, содержит <a href="localhost:4040/auth/provider">Login with provider</a>
На экспресс-стороне Iу меня есть
router.get('/auth/provider', passport.authenticate('myStrategy'));
и
router.get('/auth/provider/callback',
passport.authenticate('myStrategy', { failureRedirect: '../../../' }),
function(req, res) {
res.send('authenticated');
}
);
Я ожидал, что ссылка для входа отправит меня на /auth/provider
экспресс-маршрут, который должен быть перехвачен экспрессом, а затем обработан с помощью паспорта.js.
Однако маршрут перехватывается угловым маршрутизатором, который не распознает его и перенаправляет меня на страницу login.html.
Я видел некоторые решения здесь с target="_self"
в определении ссылки, однако, похоже, что они не работают с маршрутизацией в стиле html5, только с маршрутизацией по хэш-багу.
Решение "установить window.location='IP:port/auth/provider'
" также не работает -перенаправляет также на вход в систему.
По сути, мой вопрос: как мне запустить экспресс-маршрут из моего angular6 SPA, использующего маршрутизацию в стиле html5?
app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
// Fallback when no prior route is matched
// { path: '**', redirectTo: '', pathMatch: 'full' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule {}