I am having a simple login and it takes 3-4 seconds checking if a email is already used even though the user collection is completely empty and I have indexing applied.
Heres my code in rust:
<code>#[post("/register")]
</code>
<code>#[post("/register")]
</code>
#[post("/register")]
async fn register_post(form: actix_web::web::Form, state: web::Data) -> impl Responder {
if EmailAddress::is_valid(&form.email, None) {
<code> let random_verification_code: i32 = rand::thread_rng().gen_range(100000..1000000);
println!("{}", random_verification_code);
tokio::spawn(utils::email::sendregisteremail(form.email.clone(), random_verification_code));
let users:Collection<mongodb::bson::Document> = state.db.database("onecloud").collection("users");
// Fast indexed lookup
let filter = doc! { "email": &form.email };
println!("t1");
match users.find_one(filter, None).await {
Ok(Some(_)) => {
println!("User already exists");
}
Ok(None) => {
println!("User does not exist");
}
Err(e) => {
println!("Database error: {}", e);
}
}
let doc = mongodb::bson::doc! {
"email": form.email.to_string(),
"password": form.password.to_string(),
"verification_code": random_verification_code
};
tokio::spawn(async move {
match users.insert_one(doc, None).await {
Ok(_) => {}
Err(e) => {
println!("Error inserting document: {}", e);
}
}
});
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/confirmcode.html"))
} else {
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/error.html"))
}
/*let users = app_state.db.collection("users");
let doc = mongodb::bson::doc! {
"email": "[email protected]"
};
users.insert_one(doc, None).await.unwrap();
</code>
<code> let random_verification_code: i32 = rand::thread_rng().gen_range(100000..1000000);
println!("{}", random_verification_code);
tokio::spawn(utils::email::sendregisteremail(form.email.clone(), random_verification_code));
let users:Collection<mongodb::bson::Document> = state.db.database("onecloud").collection("users");
// Fast indexed lookup
let filter = doc! { "email": &form.email };
println!("t1");
match users.find_one(filter, None).await {
Ok(Some(_)) => {
println!("User already exists");
}
Ok(None) => {
println!("User does not exist");
}
Err(e) => {
println!("Database error: {}", e);
}
}
let doc = mongodb::bson::doc! {
"email": form.email.to_string(),
"password": form.password.to_string(),
"verification_code": random_verification_code
};
tokio::spawn(async move {
match users.insert_one(doc, None).await {
Ok(_) => {}
Err(e) => {
println!("Error inserting document: {}", e);
}
}
});
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/confirmcode.html"))
} else {
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/error.html"))
}
/*let users = app_state.db.collection("users");
let doc = mongodb::bson::doc! {
"email": "[email protected]"
};
users.insert_one(doc, None).await.unwrap();
</code>
let random_verification_code: i32 = rand::thread_rng().gen_range(100000..1000000);
println!("{}", random_verification_code);
tokio::spawn(utils::email::sendregisteremail(form.email.clone(), random_verification_code));
let users:Collection<mongodb::bson::Document> = state.db.database("onecloud").collection("users");
// Fast indexed lookup
let filter = doc! { "email": &form.email };
println!("t1");
match users.find_one(filter, None).await {
Ok(Some(_)) => {
println!("User already exists");
}
Ok(None) => {
println!("User does not exist");
}
Err(e) => {
println!("Database error: {}", e);
}
}
let doc = mongodb::bson::doc! {
"email": form.email.to_string(),
"password": form.password.to_string(),
"verification_code": random_verification_code
};
tokio::spawn(async move {
match users.insert_one(doc, None).await {
Ok(_) => {}
Err(e) => {
println!("Error inserting document: {}", e);
}
}
});
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/confirmcode.html"))
} else {
HttpResponse::Ok()
.content_type("text/html")
.body(include_str!("../public/error.html"))
}
/*let users = app_state.db.collection("users");
let doc = mongodb::bson::doc! {
"email": "[email protected]"
};
users.insert_one(doc, None).await.unwrap();
*/
}