Угловая аутентификация SPA с экспресс-сервером & passport.js -> проблема маршрутизации - PullRequest
0 голосов
/ 01 февраля 2019

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 {}
...