overleaf的用户信息,保存在mongo数据库的users集合中。
用户密码则存在hashedPassword字段中
从开源的代码services\web\app\src\Features\Authentication\AuthenticationManager.js第303行可以找到密码加密逻辑。
本地可以通过下面的代码生成overleaf用户密码信息。
npm install bcryptjs
const bcrypt = require('bcryptjs'); // 使用 bcryptjs 模块
const BCRYPT_ROUNDS = 12; // 定义哈希轮数async function hashPassword(password) {try {// 生成盐const salt = await bcrypt.genSalt(BCRYPT_ROUNDS,'a');// 使用盐对密码进行哈希const hashedPassword = await bcrypt.hash(password, salt);return hashedPassword;} catch (error) {console.error('Error hashing password:', error);throw error;}
}async function exampleUsage() {// 定义明文密码const plainPassword = '111111';console.log('明文密码:', plainPassword);// 哈希密码const hashedPassword = await hashPassword(plainPassword);console.log('Hashed密码:', hashedPassword);
}// 运行示例
exampleUsage();
通过该功能可实现其它系统与overleaf系统用户信息同步。
只需将用户信息写入mongo的users集合中即可。
补充,还有生成referal_id和_id的代码:
/*生成referal_id*/
const crypto = require('crypto')
function _randomString(length, alphabet) {const result = crypto.randomBytes(length).toJSON().data.map(b => alphabet[b % alphabet.length]).join('')return result
}
function generateReferralId() {return _randomString(16, TOKEN_ALPHANUMERICS)
}
const TOKEN_LOWERCASE_ALPHA = 'bcdfghjkmnpqrstvwxyz'
const TOKEN_NUMERICS = '123456789'
const TOKEN_ALPHANUMERICS = TOKEN_LOWERCASE_ALPHA + TOKEN_LOWERCASE_ALPHA.toUpperCase() + TOKEN_NUMERICS
const newReferralId = generateReferralId()
console.log(newReferralId)
/*生成_id*/
const { ObjectId } = require('mongodb')
user_id = new ObjectId().toString()
console.log(user_id)