gpt4 book ai didi

javascript - Angular authguard 不是持久身份验证

转载 作者:行者123 更新时间:2023-11-30 08:24:53 25 4
gpt4 key购买 nike

页面刷新后,身份验证似乎不会持续存在。每当我登录时,它都会成功重定向我。但是,当我刷新时,无法再访问。

这是auth guard

路由器

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NavComponent } from './components/nav/nav.component';
import { HomeComponent } from './components/home/home.component';
import { GalleryComponent } from './components/gallery/gallery.component';
import { FooterComponent } from './components/footer/footer.component';

import { AngularFireModule } from 'angularfire2';
import { AngularFireAuthModule } from 'angularfire2/auth';
import { AngularFireDatabaseModule, AngularFireDatabase } from 'angularfire2/database';
import { FIREBASECONFIG as firebaseConfig } from './config/firebase-config';

import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { ScrollToModule } from 'ng2-scroll-to';
import { NgxCarouselModule } from 'ngx-carousel';
import { AnimateOnScrollModule } from 'ng2-animate-on-scroll';

import { AuthService } from './services/auth.service';
import { AuthGuard } from './services/auth.guard.service';

import { HttpClientModule, HttpClient } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';


const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'gallery', component: GalleryComponent, canActivate: [AuthGuard] }
];

@NgModule({
declarations: [
AppComponent,
NavComponent,
HomeComponent,
GalleryComponent,
FooterComponent,
],
imports: [
FormsModule,
BrowserModule,
AppRoutingModule,
NgxCarouselModule,
NgbModule.forRoot(),
ScrollToModule.forRoot(),
RouterModule.forRoot(routes),
AnimateOnScrollModule.forRoot(),
HttpClientModule,
AngularFireModule.initializeApp(firebaseConfig),
AngularFireAuthModule,
AngularFireDatabaseModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
exports: [
TranslateModule
],
providers: [AngularFireDatabase, AuthService, AuthGuard],
bootstrap: [AppComponent]
})

auth.guard.ts

import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
import { AngularFireAuth } from 'angularfire2/auth';
import { Injectable, OnInit } from '@angular/core';
import { CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot } from '@angular/router';

@Injectable()
export class AuthGuard implements CanActivate {
public user = null;
constructor(private fireauth: AngularFireAuth, private router: Router) {
this.fireauth.auth.onAuthStateChanged((user) => {
if (user) {
this.user = this.fireauth.auth.currentUser;
}
});
}

ongOnInit() {
}

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): any {
if (this.user) {
return true;
} else {
this.router.navigate(['']);
return false;
}
}
}

根据我的说法,路线没问题,我想问题主要出在 auth guard 上。

最佳答案

试试这段代码

constructor(
private router:Router,
public fireauth:AngularFireAuth
){}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.fireauth.authState.map((auth) => {
if(auth == null) {
this.router.navigate(['/']);
return false;
} else {
return true;
}
});
}

我认为 this.fireauth.auth.onAuthStateChanged 用于旧版本

关于javascript - Angular authguard 不是持久身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com