Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularFire2-如何在页面刷新后保持登录状态_Javascript_Angular_Firebase_Firebase Authentication_Angularfire2 - Fatal编程技术网

Javascript AngularFire2-如何在页面刷新后保持登录状态

Javascript AngularFire2-如何在页面刷新后保持登录状态,javascript,angular,firebase,firebase-authentication,angularfire2,Javascript,Angular,Firebase,Firebase Authentication,Angularfire2,我将AngularFire2用于一个应用程序,我已经获得了Firebase的注册/登录功能,但是,每次我刷新页面时,登录状态都会重置,并且不会持续。我找不到这样做的功能,尽管我觉得我遗漏了一些非常小的东西 我可以使用AngularFireAuth检查某个地方的页面加载吗 以下是我的身份验证提供程序代码: import { Injectable } from '@angular/core'; import {Observable, Subject, BehaviorSubject} from "r

我将AngularFire2用于一个应用程序,我已经获得了Firebase的注册/登录功能,但是,每次我刷新页面时,登录状态都会重置,并且不会持续。我找不到这样做的功能,尽管我觉得我遗漏了一些非常小的东西

我可以使用
AngularFireAuth
检查某个地方的页面加载吗

以下是我的身份验证提供程序代码:

import { Injectable } from '@angular/core';
import {Observable, Subject, BehaviorSubject} from "rxjs/Rx";
import {AngularFireAuth, FirebaseAuthState} from "angularfire2";
import {AuthInfo} from "./auth-info";
import {Router} from "@angular/router";

@Injectable()
export class AuthService {


  static UNKNOWN_USER = new AuthInfo(null);

  authInfo$: BehaviorSubject<AuthInfo> = new BehaviorSubject<AuthInfo>(AuthService.UNKNOWN_USER);


  constructor(private auth: AngularFireAuth, private router:Router) {

  }

    login(email, password):Observable<FirebaseAuthState> {
        return this.fromFirebaseAuthPromise(this.auth.login({email, password}));
    }


    signUp(email, password) {
        return this.fromFirebaseAuthPromise(this.auth.createUser({email, password}));
    }


    fromFirebaseAuthPromise(promise):Observable<any> {

        const subject = new Subject<any>();

        promise
            .then(res => {
                    const authInfo = new AuthInfo(this.auth.getAuth().uid);
                    this.authInfo$.next(authInfo);
                    subject.next(res);
                    subject.complete();
                },
                err => {
                    this.authInfo$.error(err);
                    subject.error(err);
                    subject.complete();
                });

        return subject.asObservable();
    }


    logout() {
        this.auth.logout();
        this.authInfo$.next(AuthService.UNKNOWN_USER);
        this.router.navigate(['/login']);

    }

}
从'@angular/core'导入{Injectable};
从“rxjs/Rx”导入{可观察、主题、行为主题};
从“angularfire2”导入{AngularFireAuth,FirebaseAuthState};
从“/auth info”导入{AuthInfo};
从“@angular/Router”导入{Router}”;
@可注射()
导出类身份验证服务{
静态未知用户=新身份验证信息(null);
authInfo$:BehaviorSubject=新的BehaviorSubject(AuthService.UNKNOWN\u用户);
构造函数(私有身份验证:AngularFireAuth,私有路由器:路由器){
}
登录(电子邮件、密码):可观察{
返回this.fromFirebaseAuthPromise(this.auth.login({email,password}));
}
注册(电子邮件、密码){
返回this.fromFirebaseAuthPromise(this.auth.createUser({email,password}));
}
fromFirebaseAuthPromise(promise):可观察{
常量主题=新主题();
承诺
。然后(res=>{
const authInfo=new authInfo(this.auth.getAuth().uid);
this.authInfo$.next(authInfo);
主题:下一个(res);
subject.complete();
},
错误=>{
此.authInfo$.error(错误);
主体错误(err);
subject.complete();
});
返回subject.asObservable();
}
注销(){
this.auth.logout();
this.authInfo$.next(AuthService.UNKNOWN\u用户);
this.router.navigate(['/login']);
}
}

提前谢谢你

AngularFireAuth
是一个可观察的对象,并发出
FirebaseAuthState
值。如果用户登录并刷新页面,
AngularFireAuth
将发出经过身份验证的
FirebaseAuthState
;否则,它将发出
null

因此,类似这样的事情应该可以解决您的问题:

构造函数(私有身份验证:AngularFireAuth,私有路由器:路由器){
auth.subscribe((authState)=>{
如果(授权状态){
const authInfo=新的authInfo(authState.uid);
this.authInfo$.next(authInfo);
}
});
}

cartant,这可能是你第五次帮助我了。总有一天我会找到你……我会拥抱你。非常感谢你,成功了。你是最棒的!