Maison  >  Questions et réponses  >  le corps du texte

Gestion des redirections externes Vue Router (mode historique) et Webpack

<p>Communauté SO,</p> <p>J'essaie d'ajouter une authentification externe à une application Vue 2 existante. Le problème que je rencontre est que lorsque l'IdP externe redirige vers l'application Vue avec le chemin <code>/redirect</code>, le routeur Vue ne semble pas respecter le chemin mis à jour et l'itinéraire vers le bon composant. . En d'autres termes, Vue Router acheminera vers le composant <code>/</code> au lieu du composant <code>/redirect</code> </p> <p>Vue Router définit le <code>mode : 'history'</code> et Webpack définit le <code>historyApiFallback : true,</code>. </p> <h1>Comportement actuel : </h1> <ol> <li>L'utilisateur accède à <code>https://localhost:8080/</code> et le composant <code>Login</code> ≪/li> <li>L'utilisateur saisit son identifiant et est redirigé vers l'IdP externe. ≪/li> <li>Une fois l'authentification réussie, l'IdP revient à l'URL de redirection spécifiée : <code>https://localhost:8080/redirect</code></li> <li>En raison du mode historique, Webpack envoie le navigateur vers <code>/</code>, qui renvoie le composant <code>Login</code> ≪/li> <li>Dans le composant <code>Login</code>, <code> Mounted()</code> hook check<code>if (window.location.pathname === '/redirect') .push({ chemin : '/redirect' });</code></li> <li>Vue Router accède au chemin <code>/</code> au lieu de <code>/redirect</code>≪/li> </ol> <h2>技术细节:</h2> <p>Vue - 2.5.15</p><p> 路由器视图 - 3.0.0</p><p> Webpack - 4.17.1</p><p> Webpack 开发服务器 - 3.1.4</p> <h2><code>webpack.dev.js</code></h2> <pre class="brush:php;toolbar:false;">devServer : { historyApiFallback : true,</pre> <h2><code>router.js</code></h2> <pre class="brush:php;toolbar:false;">const router = new VueRouter({ mode : 'historique', itinéraires : [ ... { chemin : '/redirection', composant : Redirection, }, { chemin: '/', redirection : () => { }, ... router.beforeEach((vers, depuis, suivant) => { const utilisateur = store.state.user.authorizedUser const versPath = vers.chemin si (toPath === '/redirect') retourne });</pré> <h2><code>App.vue</code></h2> <pre class="brush:php;toolbar:false;">nouvelle Vue({ el : '#login', rendu : h => h(Connexion), magasin, })</pré> <h2><code>登录.vue</code></h2> <pre class="brush:php;toolbar:false;">monté() { if (window.location.pathname === '/redirect') router.push({ chemin : '/redirect' }); }</pré> <p>
P粉681400307P粉681400307417 Il y a quelques jours596

répondre à tous(1)je répondrai

  • P粉208469050

    P粉2084690502023-08-29 09:33:53

    Donc, le problème semble être dans le composant de niveau supérieur Login 在路由器启动之前充当交通警察的角色。我不得不编辑 Login 组件以手动挂载 Redirect.

    Je ne recommande pas cette configuration.

    répondre
    0
  • Annulerrépondre