KLT*_*LTR 5 firebase angularfire firebase-authentication firebase-storage angular
\n\n我正在尝试上传文件,除非我使用允许读取、写入,否则我将未经授权。
\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 () => {\n // upload success\n upload.url = uploadTask.snapshot.downloadURL;\n // upload.name is the name ref in firebase storage\n upload.name = uploadTask.snapshot.ref.name;\n upload.ref = uploadTask.snapshot.ref.fullPath;\n this.flashMessagesService.show(\'File was successfuly uploaded!\', { cssClass: \'alert alert-success\', timeout: 1500 })\n\n }\n )\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我有一个身份验证服务,要求用户登录才能访问此上传页面:
\n\nimport { Injectable } from \'@angular/core\';\nimport { Router } from \'@angular/router\';\nimport {FlashMessagesService} from \'angular2-flash-messages\';\n\nimport * as firebase from\'firebase/app\';\nimport { AngularFireAuth } from \'angularfire2/auth\';\nimport { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from \'angularfire2/firestore\';\nimport {Observable } from \'rxjs/Observable\';\nimport \'rxjs/add/operator/switchMap\'\nimport { User } from \'../models/user\'\n@Injectable()\nexport class AuthService {\nuser: Observable<User>;\ncurrentUser: firebase.User;\n constructor(\n private afAuth: AngularFireAuth,\n private afs: AngularFirestore,\n private router: Router,\n public flashMessagesService: FlashMessagesService,\n ) { \n // Get auth data, then get firestore user document // null\n this.user = this.afAuth.authState\n .switchMap(user => {\n if(user){\n return this.afs.doc<User>(`users/${user.uid}`).valueChanges();\n } else {\n return Observable.of(null)\n } \n })\n }\n\ngetCurrentUser(){\n return this.afAuth.auth.currentUser;\n}\n\ngetAuthState(){\nlet currentUser = this.afAuth.auth.currentUser;\n\n if(currentUser){\n return true;\n }else{\n return false;\n }\n\n}\n\n googleLogin() {\n const provider = new firebase.auth.GoogleAuthProvider();\n return this.oAuthLogin(provider);\n }\nfacebookLogin(){\n const provider = new firebase.auth.FacebookAuthProvider();\n return this.oAuthLogin(provider);\n}\nanonymousLogin(){\n const provider = new firebase.auth.EmailAuthProvider();\n return this.oAuthLogin(provider);\n}\n\n private oAuthLogin(provider){\n return this.afAuth.auth.signInWithPopup(provider)\n .then((credential)=> {\n this.updateUserData(credential)\n this.router.navigate([\'/home\'])\n })\n }\n\n private updateUserData(credential){\n const userRef: AngularFirestoreDocument<User> = this.afs.doc(`users/${credential.user.uid}`);\n const data: User = {\n uid: credential.user.uid,\n email: credential.user.email,\n displayName: credential.user.displayName,\n photoURL: credential.user.photoURL,\n accessToken: credential.credential.accessToken,\n } \n if(!data.gender){\n data.gender = \'Unassigned\'\n }\n this.flashMessagesService.show(\'You are now logged in \', { cssClass: \'alert alert-success\', timeout: 3000 })\n\n return userRef.set(data)\n }\n signOut() {\n this.afAuth.auth.signOut().then(() => {\n this.flashMessagesService.show(\'You are now logged out \', { cssClass: \'alert alert-success\', timeout: 3000 })\n\n this.router.navigate([\'/\']);\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我在这个例子中使用谷歌登录。我仍然不清楚 firebase 如何知道用户已登录,因为我在上传文件时没有发送任何授权。如果你能对这个问题有所了解,那就太好了,因为我已经在这件事上崩溃了三天了。
\n| 归档时间: |
|
| 查看次数: |
5947 次 |
| 最近记录: |