Password configuration
PasswordConfig defines the hashing and verification strategy for the entire application. It is initialized once at startup via password_init().
Initialization in `main.rs`
use runique::prelude::{password_init, PasswordConfig, Manual};
#[tokio::main]
async fn main() {
// Argon2 automatic mode (recommended default)
password_init(PasswordConfig::auto());
RuniqueApp::new()
// ...
.run()
.await;
}
If
password_init()is not called, Argon2 is used by default.
Available modes
Auto — Automatic hashing (recommended)
Runique detects whether a value is already hashed and only hashes it once. The algorithm is configurable.
// Argon2 by default
password_init(PasswordConfig::auto());
// Choose the algorithm
password_init(PasswordConfig::auto_with(Manual::Bcrypt));
password_init(PasswordConfig::auto_with(Manual::Scrypt));
Supported algorithms: Manual::Argon2, Manual::Bcrypt, Manual::Scrypt.
Manual — Explicit hashing
Hashing is not applied automatically in finalize(). The developer calls hash() manually.
password_init(PasswordConfig::manual(Manual::Argon2));
Use this when you need precise control over when and how the password is hashed.
Delegated — External authentication (OAuth / SSO)
No password is managed by Runique. Authentication is delegated to an external provider.
use runique::prelude::External;
password_init(PasswordConfig::oauth(External::GoogleOAuth));
password_init(PasswordConfig::oauth(External::Microsoft));
password_init(PasswordConfig::oauth(External::Ldap("ldap://...".to_string())));
Available providers: GoogleOAuth, Microsoft, Apple, Ldap(url), Saml(url), Custom { name, authorize_url, token_url }.
Custom — Custom handler
Implement the PasswordHandler trait to plug in your own hashing/verification logic.
use runique::prelude::{PasswordHandler, PasswordConfig};
struct MyHasher;
impl PasswordHandler for MyHasher {
fn name(&self) -> &str { "my_hasher" }
fn transform(&self, input: &str) -> Result<String, String> {
Ok(format!("hashed:{}", input))
}
fn verify(&self, input: &str, stored: &str) -> bool {
stored == format!("hashed:{}", input)
}
// ...
}
password_init(PasswordConfig::custom(MyHasher));
Usage in code
use runique::prelude::{hash, verify};
// Hash a password (uses the global config)
let hashed = hash("my_password")?;
// Verify a password against a stored hash
let ok = verify("my_password", &user.password_hash);
These functions automatically use the PasswordConfig initialized at startup.
In forms
TextField::password() fields are automatically hashed in finalize() in Auto mode. In Manual or Delegated mode, no automatic hashing occurs.
See → Field types — TextField
← Builder