Authentication Module
The auth module provides bcrypt password hashing for secure authentication.
funcs
auth.hash()
Hash a password with bcrypt:
let password = "mySecurePassword123";
let hash = auth.hash(password);
print(hash); // $2a$10$... (bcrypt hash)auth.verify()
Verify a password against a hash:
let password = "mySecurePassword123";
let hash = auth.hash(password);
let is_valid = auth.verify(password, hash);
print(is_valid); // true
let is_wrong = auth.verify("wrongPassword", hash);
print(is_wrong); // falseUser Authentication System
let users_db = {};
func register_user(username, password, email) {
if (username in users_db) {
return false; // User exists
}
users_db[username] = {
"email": email,
"password_hash": auth.hash(password),
"created_at": "2024-12-12"
};
return true;
}
func login_user(username, password) {
if (!(username in users_db)) {
return false; // User not found
}
let stored_hash = users_db[username]["password_hash"];
return auth.verify(password, stored_hash);
}
// Register
register_user("alice", "password123", "alice@example.com");
// Login
if (login_user("alice", "password123")) {
print("Login successful!");
} else {
print("Invalid credentials");
}With Database
let db = sqlite.open("users.db");
sqlite.exec(db, "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
password_hash TEXT,
email TEXT
)");
func register(db, username, password, email) {
let hash = auth.hash(password);
let sql = "INSERT INTO users (username, password_hash, email) VALUES ('" +
username + "', '" + hash + "', '" + email + "')";
sqlite.exec(db, sql);
}
func authenticate(db, username, password) {
let sql = "SELECT password_hash FROM users WHERE username = '" + username + "'";
let results = sqlite.query(db, sql);
if (len(results) == 0) {
return false;
}
return auth.verify(password, results[0]["password_hash"]);
}
// Usage
register(db, "bob", "securePass456", "bob@example.com");
if (authenticate(db, "bob", "securePass456")) {
print("Authentication successful");
}
sqlite.close(db);Best Practices
- Never store plaintext passwords
- Always hash passwords before storing
- Use bcrypt (not MD5 or SHA1)
- Implement rate limiting for login attempts
- Use strong password requirements
Next Steps
- JWT Module - Token-based authentication
- HTTP Module - Secure API endpoints
- SQLite Module - Store user data