我尝试使用AngularFire2
创建一个使用电子邮件/密码的用户这是我单击注册组件中的提交按钮时抛出错误的代码:
firebase.auth().createUserWithEmailAndPassword(this.signupForm.value.email, this.signupForm.value.password).catch(function(error) {
alert(error.message);
});
来自package.json的版本:
angular: "^2.3.1",
"angularfire2": "^2.0.0-beta.7",
"firebase": "^3.6.6"
我从一开始就使用angularfire2实现电子邮件/通过身份验证时遇到了问题,而且我已经搜索了超过一个半小时寻找这个问题的答案(其中包括没有&#39) ; t似乎是对angularfire2的大量信息/支持?)
请帮忙! 我还在学习,这真让我难过。
这是控制台中的完整错误:
vendor.bundle.js:46373 ReferenceError: firebase is not defined
at SignupComponent.webpackJsonp.806.SignupComponent.signup (http://localhost:4200/main.bundle.js:601:9)
at CompiledTemplate.proxyViewClass.View_SignupComponent0.handleEvent_0 (/AppModule/SignupComponent/component.ngfactory.js:152:34)
at CompiledTemplate.proxyViewClass.<anonymous> (http://localhost:4200/vendor.bundle.js:65473:37)
at SafeSubscriber.schedulerFn [as _next] (http://localhost:4200/vendor.bundle.js:79924:36)
at SafeSubscriber.__tryOrUnsub (http://localhost:4200/vendor.bundle.js:52413:16)
at SafeSubscriber.next (http://localhost:4200/vendor.bundle.js:52362:22)
at Subscriber._next (http://localhost:4200/vendor.bundle.js:52315:26)
at Subscriber.next (http://localhost:4200/vendor.bundle.js:52279:18)
at EventEmitter.Subject.next (http://localhost:4200/vendor.bundle.js:52079:25)
at EventEmitter.emit (http://localhost:4200/vendor.bundle.js:79898:76)
at FormGroupDirective.onSubmit (http://localhost:4200/vendor.bundle.js:81620:23)
at Wrapper_FormGroupDirective.handleEvent (/ReactiveFormsModule/FormGroupDirective/wrapper.ngfactory.js:42:34)
at CompiledTemplate.proxyViewClass.View_SignupComponent0.handleEvent_0 (/AppModule/SignupComponent/component.ngfactory.js:150:42)
at CompiledTemplate.proxyViewClass.<anonymous> (http://localhost:4200/vendor.bundle.js:65473:37)
at HTMLFormElement.<anonymous> (http://localhost:4200/vendor.bundle.js:34579:53)
答案 0 :(得分:2)
所以,结果是问题如下:
我最后修改了这个代码块:
firebase.auth().createUserWithEmailAndPassword(this.signupForm.value.email, this.signupForm.value.password).catch(function(error) {
alert(error.message);
});
到这个:
this.af.auth.createUser(this.signupForm.value).catch(function(error) {
alert(error.message);
});
问题在于我正在调用错误的对象firebase
,当我应该一直在调用this.af.auth
时,因为我定义了{{1}在我的构造函数中。
还有另一个错误,这就是我在angularfire2模块上调用错误的方法这一事实:
我用过
public af: AngularFire
我应该一直在使用
.createUserWithEmailAndPassword(email: email, password: password)
修复这两个问题使应用程序按预期工作,没有错误。
@sugarme 是正确的答案我刚刚在离开学校之前得出了同样的结论,所以我没有时间发布这个答案直到现在。
全部谢谢!
PS以下是我的完整.createUser({email, password})
供参考:
signup.component
答案 1 :(得分:1)
您可以使用AngulareFire通过电子邮件/密码创建用户:
import { Component } from '@angular/core';
import { AngularFire, AuthProviders, AuthMethods, AngularFireModule } from 'angularfire2';
@Component({
...
})
export class MyApp {
constructor(af: AngularFire) {
this.af.auth.createUser({ email: email, password: password})
.then ((user) => {
console.log(user);
})
.catch((error) => {
console.log(error);
});
}
}
如果您想使用firebase,请尝试在导入部分正下方声明变量firebase
:
var firebase = require("firebase"); // <-- Declare firebase variable here
它在我的工作组件中。让我知道结果。
答案 2 :(得分:0)
你安装了firebase吗?
npm install firebase --save
我知道它是angularfire2包的依赖。但是你的脚本没有找到它。
您是否知道并解决了问题: https://github.com/angular/angularfire2/issues/520
答案 3 :(得分:0)
你错过了将firebase导入页面
import { FirebaseProvider } from '../../providers/firebase/firebase';
import firebase from 'firebase';