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)