Angular 如何使用登录名和密码验证用户?

Angular 如何使用登录名和密码验证用户?,angular,angularfire2,Angular,Angularfire2,查看Angular 2的此解决方案: state: string = ''; error: any; constructor(public af: AngularFire,private router: Router) { this.af.auth.subscribe(auth => { if(auth) { this.router.navigateByUrl('/members'); } }); } onSubmit(formData) { if(formDat

查看Angular 2的此解决方案:

state: string = '';
error: any;

constructor(public af: AngularFire,private router: Router) {
this.af.auth.subscribe(auth => { 
  if(auth) {
    this.router.navigateByUrl('/members');
  }
});
}


 onSubmit(formData) {
if(formData.valid) {
  console.log(formData.value);
  this.af.auth.login({
    email: formData.value.email,
    password: formData.value.password
  },
  {
    provider: AuthProviders.Password,
    method: AuthMethods.Password,
  }).then(
    (success) => {
    console.log(success);
    this.router.navigate(['/members']);
  }).catch(
    (err) => {
    console.log(err);
    this.error = err;
  })
}
}
我一直在尝试在Angular 4中使用相同的功能,但是

类型“Observable”上不存在属性“login”

以下是一些不起作用的示例代码:

import { routing } from './app.routing';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { FirebaseObjectFactoryOpts } from "angularfire2/interfaces";
import { AngularFireDatabaseModule, AngularFireDatabase, 
FirebaseListObservable, FirebaseObjectObservable } from 
'angularfire2/database';
import { AngularFireAuthModule, AngularFireAuth } from 
'angularfire2/auth';
import * as firebase from 'firebase/app';

@Component({
 selector: 'app',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
 export class AppComponent {
  state: string = '';
   error: any;

  constructor(private afAuth: AngularFireAuth, private db: 
   AngularFireDatabase,private router: Router) {
   this.afAuth.authState.subscribe(auth => { 
  if(auth) {
    this.router.navigateByUrl('/members');
    }
   });
 }


onSubmit(formData) {
if(formData.valid) {
  console.log(formData.value);
  this.afAuth.authState.login({
    email: formData.value.email,
    password: formData.value.password
  },
  {
    provider: AuthProviders.Password,
    method: AuthMethods.Password,
  }).then(
    (success) => {
    console.log(success);
    this.router.navigate(['/members']);
  }).catch(
    (err) => {
    console.log(err);
    this.error = err;
    })
  }
}
}

您的代码似乎有一半是AF2.0,另一半是4.0

也就是说,AngularFire2不再为Firebase Javascript SDK提供包装器:


如果您想知道为什么我们决定不包装JSSDK,。

在这两个示例中,您似乎使用了不同的库;你有没有试过阅读你正在使用的文档,看看你应该如何做?我读了,但我不明白我是新的角度:/然后我建议阅读更多的文档和教程-就目前情况而言,你将authState视为一个可观察的地方,订阅它,在另一个地方,把它当作有一个显然没有的.login方法。@jornsharpe是对的。您应该了解服务和可观察对象是如何工作的。尤其是当你要提出网络请求时。看一下本文中使用Angular的http模块和Observable的示例。
import * as firebase from 'firebase/app';
...
this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
...
this.afAuth.auth.signOut();