【问题标题】:Add authentication data to firebase database将身份验证数据添加到 Firebase 数据库
【发布时间】:2016-10-22 18:25:47
【问题描述】:

我在一个学校项目中使用 Firebase,但我有一段时间遇到同样的问题......我查看了各种网站,但找不到任何有同样问题的人......

用户身份验证工作正常,但问题在于将用户数据保存在数据库中。 我有两种可用的身份验证方式:

  • 邮箱和密码;
  • 脸书。

使用邮箱和密码,数据成功写入数据库,我正在使用以下 JavaScript 代码:

function signUp(){
    //Get DOM data
    const email = String(document.getElementById('TXTEmail').value);
    const pass = String(document.getElementById('TXTPassword').value);
    const name = String(document.getElementById('TXTNome').value);
    const gender = document.registo.sexo.value;
    const auth = firebase.auth();
    var promise = auth.createUserWithEmailAndPassword(email,pass);
    promise.catch(e => console.log(e.message));

    firebase.database().ref('users/' + firebase.auth().currentUser.uid).set({
        name : name,
        email : email,
        gender : gender,
        uid: firebase.auth().currentUser.uid
    });
}

但是,使用facebook的功能时无法保存数据,只能认证用户,我使用的代码如下:

function signUpFacebook(){
        var provider = new firebase.auth.FacebookAuthProvider();
        firebase.auth().signInWithRedirect(provider);
        firebase.auth().getRedirectResult().then(function(result) {
            if (result.credential) {
                // This gives you a Facebook Access Token. You can use it to access the Facebook API.
                var token = result.credential.accessToken;
            }
            // The signed-in user info.
            var user = result.user;
            const name = user.displayName;
            const email = user.email;
            const photo = user.photoURL;
            if(user != 0) {
                firebase.database().ref('users/' + user.uid).set({
                    name: nome,
                    email: email,
                    photo: photo,
                    uid: user.uid
                });
            }
            //Tests only
            if(user != 0){
                console.log("name: "+user.displayName);
                console.log("email: "+user.email);
                console.log("photoUrl: "+user.photoURL);
                console.log("uid: "+user.uid);
            }
        }).catch(function(error) {
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;
            // The email of the user's account used.
            var email = error.email;
            // The firebase.auth.AuthCredential type that was used.
            var credential = error.credential;

        });
    }

我在控制台上得到了这个输出: Console output.

name: Rafael Veloso 
email: rafael****@gmail.com 
photoUrl: scontent.xx.fbcdn.net/v/t1.0-1/s100x100/… 
uid: **HY43Tl******KoO6OhZjG****

另外,我的 database.rules.json 是:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

有人知道我遇到了什么问题吗? 谢谢。

【问题讨论】:

  • 请将控制台输出作为实际文本发布,而不是图片。不允许您发布图片的原因有很多,这就是其中之一。
  • 对不起@FrankvanPuffelen,输出是:姓名:Rafael Veloso 电子邮件:rafael****@gmail.com photoUrl:scontent.xx.fbcdn.net/v/t1.0-1/s100x100/… uid:**HY43Tl******KoO6OhZjG** ***

标签: javascript firebase firebase-realtime-database firebase-authentication


【解决方案1】:

在 Firebase 支持的帮助下,我设法解决了我的问题 :)

首先,像这样在 .html 文档中创建一个脚本:

<script>
document.getElementById('btnFacebook').addEventListener('click', signUpFacebook, false);

function signUpFacebook(){
    var provider = new firebase.auth.FacebookAuthProvider();
    firebase.auth().signInWithRedirect(provider);
}

function createNewPost(name, email, photo, uid) {
    firebase.database().ref('users/' + uid).set({
        name: name,
        email: email,
        photo: photo,
        uid: uid
    });
}

firebase.auth().getRedirectResult().then(function(result) {
    if (result.credential) {
        var token = result.credential.accessToken;
    }
    // The signed-in user info.
    if(user != null) {
        console.log("name: "+user.displayName);
        console.log("email: "+user.email);
        console.log("photoUrl: "+user.photoURL);
        console.log("uid: "+user.uid);
    }

}).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;

});

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        var name = user.displayName;
        var email = user.email;
        var photo = user.photoURL;
        var uid = user.uid;
        createNewPost(name, email, photo, uid);
        console.log("name: "+user.displayName);
        console.log("email: "+user.email);
        console.log("photoUrl: "+user.photoURL);
        console.log("uid: "+user.uid);
    }
});

仅此而已,我仍然无法将用户数据添加到实时数据库,所以我更改了“导入”,我是这样的:

<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.0/firebase-messaging.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase.js"></script>

只有当我更改为以下内容时,我才能将用户数据保存在数据库中:

<!--    <script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.5.0/firebase-messaging.js"></script>-->
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase.js"></script>

但我觉得这很奇怪,谁能帮我解释一下为什么会这样?

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2019-05-05
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多