Bläddra i källkod

Implement flashed error messages

master
Dylan Baker 3 år sedan
förälder
incheckning
9afe1e863a
2 ändrade filer med 34 tillägg och 23 borttagningar
  1. 34
    22
      src/main.rs
  2. 0
    1
      templates/login.html

+ 34
- 22
src/main.rs Visa fil

141
             }
141
             }
142
         });
142
         });
143
 
143
 
144
-    app.at("/login").get(|req: tide::Request<()>| async move {
145
-        let tera = Tera::new("templates/**/*.html")?;
146
-        let mut context = Context::new();
147
-        let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
148
-        context.insert("logged_in", &logged_in);
149
-        let html = tera.render("login.html", &context)?;
150
-        Ok(Body::from_string(html))
151
-    }).post(|mut req: tide::Request<()>| async move {
152
-        let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
153
-        if logged_in {
154
-            return Ok(tide::Redirect::new("/"));
155
-        }
144
+    app.at("/login")
145
+        .get(|mut req: tide::Request<()>| async move {
146
+            let tera = Tera::new("templates/**/*.html")?;
147
+            let mut context = Context::new();
148
+            let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
149
+            context.insert("logged_in", &logged_in);
150
+            match req.session_mut().get::<String>("flash_error") {
151
+                Some(error) => {
152
+                    req.session_mut().remove("flash_error");
153
+                    &context.insert("error", &error);
154
+                }
155
+                None => {}
156
+            }
157
+            let html = tera.render("login.html", &context)?;
158
+            Ok(Body::from_string(html))
159
+        })
160
+        .post(|mut req: tide::Request<()>| async move {
161
+            let logged_in: bool = req.session().get("logged_in").unwrap_or(false);
162
+            if logged_in {
163
+                return Ok(tide::Redirect::new("/"));
164
+            }
156
 
165
 
157
-        let username = env::var("ADMIN_USERNAME")?;
158
-        let password = env::var("ADMIN_PASSWORD")?;
159
-        let user: User = req.body_form().await?;
160
-        if user.username == username && user.password == password {
161
-            req.session_mut().insert("logged_in", true)?;
162
-            Ok(tide::Redirect::new("/"))
163
-        } else {
164
-            Ok(tide::Redirect::new("/login"))
165
-        }
166
-    });
166
+            let username = env::var("ADMIN_USERNAME")?;
167
+            let password = env::var("ADMIN_PASSWORD")?;
168
+            let user: User = req.body_form().await?;
169
+            if user.username == username && user.password == password {
170
+                req.session_mut().remove("logged_in");
171
+                req.session_mut().insert("logged_in", true)?;
172
+                Ok(tide::Redirect::new("/"))
173
+            } else {
174
+                req.session_mut().remove("logged_in");
175
+                req.session_mut().insert("flash_error", "Invalid credentials")?;
176
+                Ok(tide::Redirect::new("/login"))
177
+            }
178
+        });
167
 
179
 
168
     app.at("/logout").get(|mut req: tide::Request<()>| async move {
180
     app.at("/logout").get(|mut req: tide::Request<()>| async move {
169
         req.session_mut().remove("logged_in");
181
         req.session_mut().remove("logged_in");

+ 0
- 1
templates/login.html Visa fil

11
   </div>
11
   </div>
12
   {% if error %}
12
   {% if error %}
13
     <div class="error">
13
     <div class="error">
14
-      <h1 class="error__heading">Error:</h1>
15
       <p class="error__message">{{ error }}</p>
14
       <p class="error__message">{{ error }}</p>
16
     </div>
15
     </div>
17
   {% endif %}
16
   {% endif %}

Laddar…
Avbryt
Spara