- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的应用在生产环境中运行时遇到了问题。
我的应用使用来自@auth0/angular-jwt 的angular-jwt
如果用户拥有有效 token ,他将被转发到 MainScreenComponent,在其他地方他将被重定向到登录页面。
import { AuthGuard } from './services/Authentication/auth-guard.service';
import { AuthGuardLogin } from './services/Authentication/auth-guard-login.service';
import { AuthService } from './services/Authentication/auth.service';
import { BrowserModule , HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { LoginComponent } from './components/login/login.component';
import { NotFoundComponent } from './components/not-found/not-found.component';
import { NoAccessComponent } from './components/no-access/no-access.component';
import { AppComponent } from './app.component';
import { environment } from '../environments/environment';
import { ServiceWorkerModule } from '@angular/service-worker';
import { MainScreenComponent } from './components/main-screen/main-screen.component';
import { JwtModule } from '@auth0/angular-jwt';
export function tokenGetter() {
return localStorage.getItem('token');
}
@NgModule({
declarations: [
AppComponent,
LoginComponent,
NotFoundComponent,
NoAccessComponent,
MainScreenComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),
RouterModule.forRoot([
{ path: '', component: MainScreenComponent , canActivate: [AuthGuard]},
{ path: 'login', component: LoginComponent, canActivate: [AuthGuardLogin] },
{ path: '**', component: NotFoundComponent }
]),
JwtModule.forRoot({
config: {
tokenGetter: tokenGetter,
whitelistedDomains: environment.whiteListDomains,
}
})
],
providers: [
AuthService,
AuthGuard,
AuthGuardLogin,
],
bootstrap: [AppComponent]
})
export class AppModule { }
如果我使用 ng serve 一切都会像预期的那样工作,但是在 ng build --prod 之后,如果我的初始 URL 是 https://my-site:4300/login,我会收到 404 。在这种情况下,RouterModule 设置将被忽略。
如果我输入 https://my-site:4300 ,我将被重定向到 https://my-site:4300/login 并显示登录页面。
有什么想法吗?
========================
2018 年 10 月 31 日更新:
这是 AuthGuardLogin:
import { AuthService } from './auth.service';
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuardLogin implements CanActivate {
constructor( private router: Router, private authService: AuthService) { }
canActivate() {
if (this.authService.isLoggedIn() === false) {
return true; }
this.router.navigate(['/']);
return false;
}
}
我现在所做的是在 Kestrel 服务器中托管网站。现在它完美无缺。为什么?我不知道:-)!
顺便说一句,Kestrel 服务器托管在 Windows 服务中。所以我可以使用我们的软件包部署它并通过常规设置进行安装。
致以最诚挚的问候,非常感谢!!!
最佳答案
当刷新出现错误并且无法识别页面时,我在生产环境中遇到了类似的问题。
我通过使用修复它: imports: [RouterModule.forRoot(routes, { 使用哈希:真 })],
我建议这个解决方案,因为你说当你输入默认 url 时它工作并在登录时重定向,但是当你输入/login 时它没有。
使用useHash是因为angular是spa,需要先加载主index.html。在 localhost 和 webpack 中它工作正常,但是当你通过服务器提供你的应用程序时,你需要在刷新时浏览 index.html 以及当你在不使用 Angular 路由器时直接点击 url 时。
您的网址会变得有点难看,因为每个网址前都会添加#。例如 domain/login 将变成 domain/#/login
希望对你有帮助
关于Angular RouterModule 在生产中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996323/
我在一个网站上工作,该网站在生产中只有 aspx 文件和 bin 目录和文件。任何人都知道这个网站是如何部署的,我通常有我的网站,我也会提交代码。 我的问题 2. 如何在同一台服务器上创建测试网站?我
您好,我认为这应该是一个相当简单的问题,但我对管理 git 不太熟悉。 我使用的是非常流行的 http://nvie.com/posts/a-successful-git-branching-mode
目前我的网站(生产服务器)已经有很多代码了。现在我想开始在我的项目中使用 Git 并为我的团队设置一个暂存服务器。谁能给我任何建议? 这是我脑海中的画面: Production
我目前正在学习 Erlang SO 用户能否提供有关他们的任何 Erlang 应用程序部署的有趣示例? 我想深入了解 Erlang 在过去的电信中的常见用途,以及 Erlang 在开发/部署过程中带来
我关注了Ryan's screencast并部署到 VPS。所以我使用 Unicorn + nginx + github + Ubuntu 12.04 LTS + capistrano。我也使用 i1
我想在 Azure 中维护临时环境和生产环境。每个都应该有自己的 blob 存储和 sql 存储。实现这一目标的最佳方法是什么?设置临时和生产 SQL Server 以及两个 Blob 存储帐户? 最
我无法使用 Electron 打包程序在内置的 Electron 应用程序中打开chrome开发工具。 我已经尝试过mainWindow.webContents.openDevTools(),但这没有
我有一个 Azure 应用程序服务环境。 可以在同一个 ASE 中运行多个应用服务计划(开发、测试和生产)吗? 基本上,我知道他们会共享前端池,我认为这很好,因为那里没有运行应用程序代码,并且它“..
我是 Maven 新手,有 Rails 背景。在较高级别上,如果我正在运行测试、在本地运行应用程序以及在部署到生产环境时,我希望连接到不同的数据库。 这就是我的想法。当我运行 mvn test 时,它
我有一个 Azure 应用程序服务环境。 可以在同一个 ASE 中运行多个应用服务计划(开发、测试和生产)吗? 基本上,我知道他们会共享前端池,我认为这很好,因为那里没有运行应用程序代码,并且它“..
我正在使用 faSTLane\produce 脚本制作一个新应用程序,我收到以下错误消息: in `parse_response': {"data"=>nil, "messages"=>{"warn"
使开发人员能够构建包含私有(private)数据的系统的当前做法是什么?谁能指出这类事情的“最佳实践”指南? 我们这里有一个 Catch-22,因为开发人员需要编写与具有被认为是“私有(private
我有一个连接 Azure SQL Server 的 Azure 云服务。当我第一次设置这个时,我真的不太了解自己在做什么,只是想熟悉 Azure。所以现在我想利用我所拥有的东西并将其转变为可靠的部署结
我是 Cordova 的新手。抱歉,如果这些是业余问题。我想详细了解典型手机应用程序的设置和架构。 我有一个本地版本的 Meteor Cordova 正在运行,它通过 Modulus 连接到远程服务器
我一直在寻找一些在一些 POS(销售点)设备和服务器之间同步数据的选项。 SymmetricDS似乎是具有商业友好许可证的选项之一。作为一个 Codehaus 项目确实保证了一定程度的质量,所以我同意
在 PHP 开发中,可以通过服务器的“环境”变量确定应用程序是在生产环境还是开发环境中运行。 在 tomcat 服务器上是否有类似的变量可用,或者是否有更好的方法将应用程序用于生产和开发? 最佳答案
我正在做一个项目,我需要使用 TwitterAPI 检索 Twitter 消息,处理它们并将它们存储在数据库中。我正在使用 Producer/Consumer BlockingQueue,其中元素的作
这个问题类似于:iPhone development - what is the difference between a development and distribution provision
我正在尝试根据 URL 在 Drupal 中设置环境。例如,如果我访问 mysite.local,它将使用 localdb 并将站点名称更改为“Local Mysite”;如果我转到 mysite.c
我今天一直在阅读 Magento 中的数据库同步。 我目前正在努力解决的一件事是在开发期间和上传到生产期间需要同步什么。现在假设一批更改将包含对数据库和类似代码的更改,下面是我对模型工作流的理解(我目
我是一名优秀的程序员,十分优秀!