【问题标题】:Firebase google authentication with node js使用节点 js 进行 Firebase 谷歌身份验证
【发布时间】:2020-02-06 07:50:34
【问题描述】:

我想在我的应用中添加一个按钮“使用 google 登录”,并且我正在尝试使用 node js 中的 firebase 进行身份验证。我没有从 firebase 官方网站获得任何示例,其中提供了 java 脚本的文档。

请在下面找到代码sn-p:

const firebaseAdmin = require('firebase-admin');
const serviceAccount = require('./SAK.json');
const FirebaseAuth = require('firebaseauth');
const authProvider = new FirebaseAuth("API_KEY");
const authToken = FirebaseAuth.initTokenMiddleware(serviceAccount);

firebaseAdmin.initializeApp({
    credential: firebaseAdmin.credential.cert(serviceAccount)
});

router.get('/loginWithGoogle/', (req,res) => {
    authProvider.loginWithGoogle(authToken, function(err, result) {
    if (err) {
        console.log('err');
    }
    else {
        console.log(result);
    }
});
});

我猜 authToken 的值为 null。我收到以下错误:

TypeError:无法读取 null 的属性“修剪” 在 loginWithProviderID (/workspace/sodiumBackend/node_modules/firebaseauth/dist/providers/social-providers.js:22:23) 在 Object.loginWithGoogle (/workspace/sodiumBackend/node_modules/firebaseauth/dist/providers/social-providers.js:57:5) 在 FirebaseAuth.loginWithGoogle (/workspace/sodiumBackend/node_modules/firebaseauth/dist/index.js:61:25) 在 router.get (/workspace/sodiumBackend/src/routes/api/user.js:8:18) 在 Layer.handle [as handle_request] (/workspace/sodiumBackend/node_modules/express/lib/router/layer.js:95:5) 在下一个(/workspace/sodiumBackend/node_modules/express/lib/router/route.js:137:13) 在 Route.dispatch (/workspace/sodiumBackend/node_modules/express/lib/router/route.js:112:3) 在 Layer.handle [as handle_request] (/workspace/sodiumBackend/node_modules/express/lib/router/layer.js:95:5)

【问题讨论】:

    标签: node.js firebase express firebase-authentication google-authentication


    【解决方案1】:

    嗨, 首先,请检查 firebase Admin 中“管理用户”的文档。

    https://firebase.google.com/docs/auth/admin/manage-users

    注意 firebase createUser 方法

        admin.auth().createUser({
      email: 'user@example.com',
      emailVerified: false,
      phoneNumber: '+11234567890',
      password: 'secretPassword',
      displayName: 'John Doe',
      photoURL: 'http://www.example.com/12345678/photo.png',
      disabled: false
    })
      .then(function(userRecord) {
        // See the UserRecord reference doc for the contents of userRecord.
        console.log('Successfully created new user:', userRecord.uid);
      })
      .catch(function(error) {
        console.log('Error creating new user:', error);
      });
    

    “默认情况下,Firebase 身份验证会为新用户生成一个随机 uid。”

    创建用户后,您可以为其创建令牌

    var myTokenToSave;
       admin
            .auth()
            .createCustomToken(userRecord.uid)
            .then(function(customToken) {
              myTokenToSave = customToken;
            });
    

    然后最终验证它

     admin.auth().verifyIdToken(idToken)
      .then(function(decodedToken) {
        let uid = decodedToken.uid;
        // ...
      }).catch(function(error) {
        // Handle error
      });
    

    希望这是有道理的,代码放置和使用取决于您的实现。

    【讨论】:

    • 感谢您的回答,但我相信此示例用于使用 JSON Web 令牌 (JWT) 进行身份验证。我想使用 google 帐户进行身份验证。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2023-03-14
    • 2019-03-16
    相关资源
    最近更新 更多