@@ -54,6 +54,7 @@ pub struct SessionMiddleware<Store> {
5454 cookie_domain : Option < String > ,
5555 session_ttl : Option < Duration > ,
5656 save_unchanged : bool ,
57+ secure : Option < bool > ,
5758 same_site_policy : SameSite ,
5859 key : Key ,
5960}
@@ -66,6 +67,7 @@ impl<Store: SessionStore> std::fmt::Debug for SessionMiddleware<Store> {
6667 . field ( "cookie_name" , & self . cookie_name )
6768 . field ( "cookie_domain" , & self . cookie_domain )
6869 . field ( "session_ttl" , & self . session_ttl )
70+ . field ( "secure" , & self . secure )
6971 . field ( "same_site_policy" , & self . same_site_policy )
7072 . field ( "key" , & ".." )
7173 . field ( "save_unchanged" , & self . save_unchanged )
9193 session. expire_in ( ttl) ;
9294 }
9395
94- let secure_cookie = request. url ( ) . scheme ( ) == "https" ;
96+ let mut secure_cookie = request. url ( ) . scheme ( ) == "https" ;
97+ if let Some ( secure) = self . secure {
98+ secure_cookie = secure;
99+ }
95100 request. set_ext ( session. clone ( ) ) ;
96101
97102 let mut response = next. run ( request) . await ;
@@ -140,6 +145,7 @@ impl<Store: SessionStore> SessionMiddleware<Store> {
140145 /// * cookie path: "/"
141146 /// * cookie name: "tide.sid"
142147 /// * session ttl: one day
148+ /// * secure: request.scheme == 'https'
143149 /// * same site: strict
144150 /// * save unchanged: enabled
145151 ///
@@ -160,6 +166,7 @@ impl<Store: SessionStore> SessionMiddleware<Store> {
160166 /// .with_cookie_name("custom.cookie.name")
161167 /// .with_cookie_path("/some/path")
162168 /// .with_cookie_domain("www.rust-lang.org")
169+ /// .with_secure(true)
163170 /// .with_same_site_policy(SameSite::Lax)
164171 /// .with_session_ttl(Some(Duration::from_secs(1)))
165172 /// .without_save_unchanged(),
@@ -172,6 +179,7 @@ impl<Store: SessionStore> SessionMiddleware<Store> {
172179 cookie_path : "/" . into ( ) ,
173180 cookie_name : "tide.sid" . into ( ) ,
174181 cookie_domain : None ,
182+ secure : None ,
175183 same_site_policy : SameSite :: Lax ,
176184 session_ttl : Some ( Duration :: from_secs ( 24 * 60 * 60 ) ) ,
177185 key : Key :: derive_from ( secret) ,
@@ -217,6 +225,14 @@ impl<Store: SessionStore> SessionMiddleware<Store> {
217225 self
218226 }
219227
228+ /// Sets the secure attribute of the cookie.
229+ /// Defaults to true if the incoming request scheme is 'https'
230+ /// Can optionally be set to true or false to override
231+ pub fn with_secure ( mut self , secure : bool ) -> Self {
232+ self . secure = Some ( secure) ;
233+ self
234+ }
235+
220236 /// Sets the same site policy for the session cookie. Defaults to
221237 /// SameSite::Lax. See [incrementally better
222238 /// cookies](https://tools.ietf.org/html/draft-west-cookie-incrementalism-01)
0 commit comments