我正在尝试通过标准UI将Firebase身份验证添加到我的node.js应用中。 在我的登录页面上,我添加了以下代码:
// Initialize Firebase
var config = {
apiKey: "...",
authDomain: "...",
databaseURL: "...",
projectId: "...",
storageBucket: "...",
messagingSenderId: "..."
};
firebase.initializeApp(config);
var ui = new firebaseui.auth.AuthUI(firebase.auth());
ui.start('#firebaseui-auth-container', {
signInOptions: [
// List of OAuth providers supported.
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
/*firebase.auth.FacebookAuthProvider.PROVIDER_ID,
firebase.auth.TwitterAuthProvider.PROVIDER_ID,
firebase.auth.GithubAuthProvider.PROVIDER_ID*/
],
signInSuccessUrl: "firebase-login"
})
到目前为止,一切都很好。显示“使用Google登录”,“ Facebook”等按钮,并且在登录(例如,使用Google)后,将我带回到登录页面,并在一秒钟后将我重定向到firebase-login
上面的signInSuccessUrl
参数。
现在,在我的背面,我有以下内容:
app.get("/firebase-login", function(req, res){
res.json("ok");
});
那么如何在firebase-login
路由中形成有关登录用户的信息?我需要这样做,以便检查用户是否已经注册等。
答案 0 :(得分:0)
好吧,我做到了。
在客户端,我必须向ui.start
配置添加回调,以检索已登录用户的idToken并将其发布到后端,例如:
ui.start('#firebaseui-auth-container', {
callbacks: {
signInSuccessWithAuthResult: function(authResult, redirectUrl) {
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
var form = document.body.appendChild(document.createElement("form"));
form.action = "/firebase-login";
form.method = "POST";
var input = form.appendChild(document.createElement("input"));
input.type = "hidden";
input.name = "idToken";
input.value = idToken;
form.submit();
}).catch(function(error) {
console.error(error);
});
return false;
}
}, ...
然后在背面,我使用firebase-admin
从客户端发布的idToken中获取用户信息,如下所示:
const admin = require('firebase-admin');
var serviceAccount = require('path/to/serviceAccont.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<MY-APP-ID>.firebaseio.com"
});
app.post("/firebase-login", function(req, res){
admin.auth().verifyIdToken(req.body.idToken)
.then(function(decodedToken) {
console.log(JSON.stringify(decodedToken));
}).catch(function(error) {
res.json(error);
});
});
等等! decodedToken
包含了我需要的有关用户的所有信息(例如全名,电子邮件,图片url等);