【问题标题】:Firebase Authentication Javascript: setCookie for pending Credential for redirectFirebase 身份验证 Javascript:setCookie 用于重定向的待处理凭据
【发布时间】:2017-01-17 01:21:42
【问题描述】:

我正在尝试使用singinwithredirect 来链接多重身份验证。我抓住错误.credential 并使用JSON.stringify 将其传递给cookie。

从那里,我使用JSON.parse 将其转换回一个对象,但是当我尝试将凭据对象传递给result.user.link(credential) 时,它给了我一个错误说明:

firebase.js:74 Uncaught Error: link failed: First argument "credential" must be a valid credential

我是否必须将 JSON 对象转换为 Firebase 对象才能在凭据中传递它?对象最初的样子:

Ef {accessToken: "EAAQmrlAUQpEBAL4oiPWEJy.......", provider: "facebook.com"}

对象从cookie ('string') 转换回 JSON 后的样子:

Object {accessToken: "EAAQmrlAUQpEBAL4oiPWEJy.......", provider: "facebook.com"}

【问题讨论】:

    标签: javascript json cookies firebase firebase-authentication


    【解决方案1】:

    你应该小心删除缓存后的 accessToken 和 secret。

    解析的 JSON 可能不是用于链接待处理凭据的有效 firebase 对象。在链接之前,您必须先将其传递给 firebase 身份验证提供程序对象。

    // Read cookie
    var pendingCred = document.cookie;
    
    // Parse
    var pendingCredObj = JSON.parse(pendingCred);
    
    // Delete cookie
    document.cookie ="pendingCred=" + null + "; expires=0";
    
    // Link with appropriate auth provider object
    if (pendingCredObj.provider == "twitter.com"){
        var pendingCredObjProv = firebase.auth.TwitterAuthProvider.credential(pendingCredObj.accessToken, pendingCredObj.secret);
    } else if (pendingCredObj.provider == "facebook.com"){
        var pendingCredObjProv = firebase.auth.FacebookAuthProvider.credential(pendingCredObj);
    } else if (pendingCredObj.provider == "google.com"){
        var pendingCredObjProv = firebase.auth.GoogleAuthProvider.credential(pendingCredObj);
    } else if (pendingCredObj.provider == "password"){
        var pendingCredObjProv = firebase.auth.EmailAuthProvider.credential(pendingCredObj);
    }
    
    // Link pending credentials to original user account
    auth.currentUser.link(pendingCredObjProv).then(function(user) {
        console.log("Account linking success", user);
    }, function(error) {
        console.log("Account linking error", error);
    });
    

    【讨论】:

    • 感谢@jruser2120512,我可以使用上述建议
    【解决方案2】:

    首先,我建议您使用 sessionStorage 而不是 cookie,因为它包含一个 OAuth 访问令牌,您不想在页面关闭时泄露它。

    解析 json 对象后。 检查提供者字段。基于此,您可以确定它是什么类型的凭证。例如,如果提供者是 facbeook.com:

    var cred = firebase.auth.FacebookAuthProvider.credential(obj['accessToken');

    在这种情况下,您将使用解析对象中的 accessToken 初始化凭证。

    【讨论】:

    • 感谢博耶!!会给你们两个+1,但在这个论坛上还没有足够的信誉
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2013-06-17
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多