1
0
Fork 0

Fill invalid forms with submitted values

This commit is contained in:
Alex Kotov 2020-10-18 06:50:13 +05:00
parent f5654b3caa
commit c3af555918
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
5 changed files with 23 additions and 11 deletions

View File

@ -25,6 +25,7 @@ pub fn new(
let page_context = views::sessions::New {
authenticity_token: csrf_token.0.to_string(),
username: "".to_string(),
};
let context = views::Site {
@ -54,10 +55,10 @@ pub fn create(
}
let user = models::User::by_username(db_conn, form.username.to_string())
.or_else(|_| Err(invalid_sign_in_credentials(&csrf_token.0)))?;
.or_else(|_| Err(invalid_sign_in_credentials(&csrf_token.0, &form.0)))?;
if !user.authorize(&form.password) {
return Err(invalid_sign_in_credentials(&csrf_token.0));
return Err(invalid_sign_in_credentials(&csrf_token.0, &form.0));
}
cookies.add_private(Cookie::new("user_id", user.id.to_string()));
@ -85,9 +86,13 @@ pub fn delete(
Ok(Redirect::to(uri!(super::home::index)))
}
fn invalid_sign_in_credentials(authenticity_token: &String) -> CommonResponse {
fn invalid_sign_in_credentials(
authenticity_token: &String,
form: &forms::UserSignIn,
) -> CommonResponse {
let page_context = views::sessions::New {
authenticity_token: authenticity_token.to_string(),
username: form.username.to_string(),
};
let context = views::Site {

View File

@ -25,6 +25,7 @@ pub fn new(
let page_context = views::users::New {
authenticity_token: csrf_token.0.to_string(),
username: "".to_string(),
};
let context = views::Site {
@ -54,18 +55,22 @@ pub fn create(
}
let user = models::NewUser::from_form(&form)
.or_else(|_| Err(invalid_sign_up_form(&csrf_token.0)))?
.or_else(|_| Err(invalid_sign_up_form(&csrf_token.0, &form.0)))?
.save(db_conn)
.or_else(|_| Err(invalid_sign_up_form(&csrf_token.0)))?;
.or_else(|_| Err(invalid_sign_up_form(&csrf_token.0, &form.0)))?;
cookies.add_private(Cookie::new("user_id", user.id.to_string()));
Ok(Redirect::to(uri!(super::home::index)))
}
fn invalid_sign_up_form(authenticity_token: &String) -> CommonResponse {
fn invalid_sign_up_form(
authenticity_token: &String,
form: &forms::UserSignUp,
) -> CommonResponse {
let page_context = views::users::New {
authenticity_token: authenticity_token.to_string(),
username: form.username.to_string(),
};
let context = views::Site {

View File

@ -28,6 +28,7 @@ pub mod sessions {
#[derive(Serialize)]
pub struct New {
pub authenticity_token: String,
pub username: String,
}
}
@ -35,5 +36,6 @@ pub mod users {
#[derive(Serialize)]
pub struct New {
pub authenticity_token: String,
pub username: String,
}
}

View File

@ -6,12 +6,12 @@
<div class="form-group">
<label for="username">Username</label>
<input id="username" name="username" type="text" class="form-control" placeholder="Username"/>
<input type="text" id="username" name="username" value="{{ username }}" class="form-control" placeholder="Username"/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input id="password" name="password" type="password" class="form-control" placeholder="Password"/>
<input type="password" id="password" name="password" class="form-control" placeholder="Password"/>
</div>
<button type="submit" class="btn btn-primary">

View File

@ -6,17 +6,17 @@
<div class="form-group">
<label for="username">Username</label>
<input id="username" name="username" type="text" class="form-control" placeholder="Username"/>
<input type="text" id="username" name="username" value="{{ username }}" class="form-control" placeholder="Username"/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input id="password" name="password" type="password" class="form-control" placeholder="Password"/>
<input type="password" id="password" name="password" class="form-control" placeholder="Password"/>
</div>
<div class="form-group">
<label for="password_confirmation">Password confirmation</label>
<input id="password_confirmation" name="password_confirmation" type="password" class="form-control" placeholder="Password confirmation"/>
<input type="password" id="password_confirmation" name="password_confirmation" class="form-control" placeholder="Password confirmation"/>
</div>
<button type="submit" class="btn btn-primary">