簡體   English   中英

Firebase 身份驗證遷移

[英]Firebase Authentication Migration

我試圖擺脫 Firebase 身份驗證。 所以我導出了所有 firebase 用戶的電子郵件、hashedPassword、saltKey 以及所有其他必要信息。

畢竟,我將它們遷移到數據庫並嘗試使用 JWT 和 Express.js 實現身份驗證流程。

我所做的是使用firebase-scrypt npm 來驗證 hashedPassword 與從原始 firebase 應用程序獲得的 saltkey 和 firebase auth 配置。

無論我輸入什么密碼,它都被驗證為真,我無法使身份驗證流程正常工作。

如果有人遇到這個問題並幫助我解決這個問題,我真的很感激。

謝謝你仔細看。

下面附上ps代碼

import { FirebaseScrypt } from 'firebase-scrypt';
const hashConfig: FirebaseScryptOptions = {
  signerKey: 'xxxx',
  saltSeparator: 'xxxx',
  rounds: 8,
  memCost: 14
};
const scrypt = new FirebaseScrypt(hashConfig);
public async login(req: Request, res: Response) {
  const { email, password } = req.body;
  try {
    const user = await User.findOne({
      where: {
        email
      }
    });

    const hashedPassword = await scrypt.hash(password, user.salt);
    const valid = await scrypt.verify(password, user.salt, hashedPassword);
    if (!valid) {
      res.status(400).send(AuthError.InvalidPassword);
      return;
    }
    const token = AuthController.createToken(user.id);
    res.setHeader('token', AuthController.createCookie(token));
    res.send(user);
  } catch (e) {
    res.status(400).send(AuthError.UserNotFound);
  }
}

函數scrypt.hash(password, user.salt)不會獲取現有的哈希,但它會根據給定的密碼和鹽生成一個新的哈希。 根據給定的密碼生成新的散列后,然后檢查給定的密碼對該散列是否有效。 這總是正確的,因為總是為輸入密碼生成哈希:)

因此,您可能應該將const hashedPassword = ...行更改為從數據庫加載哈希的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM