我正在开发一个带有firebase和angular and angularfire的应用程序.我想实现一个"邀请协作者"功能,就像firebase本身实现协作一样 - 也就是说,app用户可以输入一个电子邮件地址来邀请协作者发送电子邮件并生成"inviteToken",就像在firebase本身中邀请协作者时完成.我理解安全规则(限制协作者访问)和架构设计(一个/协作者'文件夹'?)是一个方面,可以使用本机firebase和angular来完成.我的问题是如何最好地实施邀请电子邮件和'inviteToken'?实现这种邀请功能最有效的方法是什么?可以使用原生firebase吗?或者是否需要实现单独的服务器端代码(nodejs?)?也许来自firebase团队的人可以根据firebase本身如何实现协作来发表意见.
我设置了一个编辑一个字段的小样本应用程序.但是当我输入该字段时,内容会一直恢复到一秒钟之前.我正在寻找AngularFire的修复程序,它可以使它正常工作,或者我正在寻找一个我没有正确初始化它的RTFM.此时bindTo()不可用,我根本无法继续使用AngularFire.
这是完整的示例(您可以在http://jsbin.com/wabafu/3上打开它):
<!DOCTYPE html>
<html ng-app="myapp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js"></script>
<script src='https://cdn.firebase.com/js/client/1.0.19/firebase.js'></script>
<script src='https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js'></script>
<script>
var app = angular.module("myapp", ["firebase"]);
function MyController($scope, $firebase) {
var ref = new Firebase("https://stackoverflow25331760.firebaseIO.com/"),
syncObject = $firebase(ref).$asObject();
syncObject.$bindTo($scope, "data");
}
</script>
</head>
<body ng-controller="MyController">
<h3>
<input type="checkbox" ng-model="EditMode"> Enable Editing
</h3>
<div ng-if="EditMode">
<input type="text" ng-model="data.SyncValue" style="width:100%">
</div>
<div ng-if="!EditMode">
{{data.SyncValue}}
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它只在一个浏览器中打开时工作顺畅,但是当打开多个时,我不能输入多于一个字或两个字而没有文本内容恢复到几个键击前并且光标移动到字段的末尾.
我想发生的事件是:
我想这个过程是错的吗?我该怎么做才能停止第5步?
PS测试时,我发现我可以通过快速键入几个字符然后等待2秒重复来解决#7问题.这样,当同步回显并且我的光标不会跳转时,该值不会改变.
PPS为了尝试缩小范围,我创建了一个复选框来控制数据是显示在字段中,还是只显示只读div.即使第二个浏览器仅显示数据,该回显/恢复行为仍然存在于第一个浏览器中.数据正确存储在firebase中的唯一方法是,如果我一次只有一个浏览器使用它.
我正在使用Angularfire创建数组,但我无法设置密钥名称.Firebase会自动给我一个神秘的密钥(例如Jm9vLy8Lye-KS35KsmL),但我想把它自己设置为更有意义的东西.目前还不清楚我是如何在Angularfire中做到这一点的.我在$ firebaseArray上使用$ add方法:
var firebaseRef = new Firebase("https://firebase_location");
$scope.messages = $firebaseArray(firebaseRef);
$scope.messages.$add(
{
FirstName: patient.FirstName,
LastName: patient.LastName
}
).then(function(firebaseRef) {
var id = firebaseRef.key();
});
Run Code Online (Sandbox Code Playgroud)
数据存储得很好,我可以在仪表板上看到它.但是,id始终是一个神秘的火力值.我希望能够将自己设定为有意义的东西.在我的情况下,个别患者的ID将是有意义的...
有什么想法吗?
谢谢!
在我尝试使用firebase身份验证服务之后,我得到了一个 uncaught error: a network error (such as timeout, interrupted connection or unreachable host) has occurred
我试图将所有相关域名列入白名单:
<allow-intent href="*.firebaseio.com" />
<allow-intent href="*.firebaseapp.com" />
<allow-intent href="*.google.com" />
<allow-intent href="*.googleapis.com" />
<allow-intent href="*.cloudflare.com" />
<allow-intent href="auth.firebase.com" />
<access origin="*" />
Run Code Online (Sandbox Code Playgroud)
并要求互联网用户许可:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
但仍然 - 尽管代码在网络浏览器上运行完美,它仍然在Android模拟器上显示此错误.
当我尝试使用带有诺基亚Lumia 520电话的"firebase-auth/web-storage-unsupported"的firebase身份验证登录我的网站时,会抛出错误代码.我正在使用AngularFire 2.0.1.有什么方法我可以解决这个问题,因为我的一些用户仍然使用旧版本的Internet Explorer这些手机.
我正在使用AngularJS和Firebase.
目标:我想显示Firebase中的所有数据(固定数量的项目:~1600).
问题: AngularFire调用"已加载"大约需要10秒钟.数据大约120 kb,我觉得这可能会更快.(例如,从.json文件加载数据集大约需要一秒钟).
有没有办法加快速度?
我正在尝试找出如何在 TypeScipt 中获取 Firebase Authenticated 用户的 uid:
<div> {{ (user | async)?.uid }} </div>
Run Code Online (Sandbox Code Playgroud)
我有以下 TS 代码:
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app'
@Component({
selector: 'app-user-portal',
templateUrl: './user-portal.component.html',
styleUrls: ['./user-portal.component.css']
})
export class UserPortalComponent implements OnInit {
user: Observable<firebase.User>;
constructor(
public afAuth: AngularFireAuth
) {
this.user = afAuth.authState;
}
ngOnInit() {
}
}
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都表明我需要访问...的 id 属性
this.afAuth.auth.currentUser.uid
Run Code Online (Sandbox Code Playgroud)
......但这似乎没有暴露。如果我把它改成...
this.afAuth.auth.currentUser.toJSON()
Run Code Online (Sandbox Code Playgroud)
...并将其发送到控制台,然后我确实看到了一个 uid 属性。我怎样才能得到那个财产?
这甚至是为用户获取 uid 的正确方法吗?将...
this.afAuth.auth.currentUser.getIdToken()
Run Code Online (Sandbox Code Playgroud)
... 会更好?如果这样更好,我也看不出如何从中获取 uid。建议?
firebase typescript angularfire firebase-authentication angular
我正在尝试上传文件,除非我使用允许读取、写入,否则我将未经授权。
\n\nFirebaseStorageError {code_: "storage/unauthorized", message_: "Firebase \nStorage: User does not have permission to\xe2\x80\xa62/dxbdIGnx2Qdm9MfTtG5e/if_spider-\nweb_345348.png\'.", serverResponse_: "{\xe2\x86\xb5 "error": {\xe2\x86\xb5 "code": 403,\xe2\x86\xb5 \n"message": "Pe\xe2\x80\xa6n denied. Could not perform this operation"\xe2\x86\xb5 }\xe2\x86\xb5}", name_: \n"FirebaseError"}\nRun Code Online (Sandbox Code Playgroud)\n\n我想知道 firebase 如何知道用户已登录?在我的代码中,我在尝试上传文件时不发送任何身份验证。
\n\n这是我上传文件的代码:
\n\nlet uploadTask = storageRef.child(`user_content`).child(uid).child(upload.podcast_id).child(upload.file.name).put(upload.file);\n uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,\n (snapshot) =>{\n // upload in progress\n upload.progress = Math.floor((uploadTask.snapshot.bytesTransferred / uploadTask.snapshot.totalBytes )* 100)\n },\n (error) =>{\n // upload failed\n this.flashMessagesService.show(\'Oh snap! please try again..\', { cssClass: \'alert alert-danger\', timeout: 1500 }) \n console.log(error)\n },\n () => …Run Code Online (Sandbox Code Playgroud) firebase angularfire firebase-authentication firebase-storage angular
我现在处理这个问题已经快两周了。我尝试了很多解决方法,但似乎没有一个有效。我已经安装angular-fire并安装firebase到它的最新版本,尝试过ng add @angular/fire,配置自定义webpack.config.ts,尝试回滚到每个建议的先前版本。没有人解决这个问题。
实际错误:
de-10@de10-LIFEBOOK-A555:~/Desktop$ node dist/server.js
internal/modules/cjs/loader.js:797
throw err;
^
Error: Cannot find module 'firebase/app'
Require stack:
- /home/de-10/Desktop/dist/server.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15)
at Function.Module._load (internal/modules/cjs/loader.js:687:27)
at Module.require (internal/modules/cjs/loader.js:849:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/home/de-10/Desktop/dist/server.js:125276:18)
at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30)
at Module.<anonymous> (/home/de-10/Desktop/dist/server.js:125199:70)
at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30)
at Module.<anonymous> (/home/de-10/Desktop/dist/server.js:124984:78)
at __webpack_require__ (/home/de-10/Desktop/dist/server.js:20:30) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/home/de-10/Desktop/dist/server.js' ]
}
Run Code Online (Sandbox Code Playgroud)
我不能放弃 Firebase 因为然后我面临:
ERROR in ../node_modules/@angular/fire/auth/auth.d.ts:4:28 - error TS2307: Cannot find module 'firebase/app'.
4 …Run Code Online (Sandbox Code Playgroud) 我一直在为 iOS 和 Android 开发一款新应用程序。我正在使用Ionic 5、Capacitor和Firebase 9在Angular 12上开发它上开发它。
虽然我习惯使用 AngularFireAuth 设置身份验证页面(登录/注册/密码重置),但我在使用 Ionic 和 Capacitor 进行同样的操作时遇到了麻烦。我的页面、服务和防护在浏览器上运行良好,但一旦我运行基于 XCode 的“ionic capsync”并尝试在我的 iPhone 上运行,我的登录功能就无法运行。
到目前为止,这是我的代码:
验证服务:
import { Injectable, NgZone } from '@angular/core';
import { User } from './authUser.model';
import { Router } from '@angular/router';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/compat/firestore';
@Injectable({
providedIn: 'root'
})
export class AuthService {
userData: any;
constructor(
public afStore: AngularFirestore,
public ngFireAuth: AngularFireAuth,
public router: …Run Code Online (Sandbox Code Playgroud) angularfire ×10
firebase ×9
angularjs ×4
angular ×3
angularfire2 ×1
capacitor ×1
javascript ×1
typescript ×1