@@ -91,37 +91,40 @@ In each example directory, execute `cargo run`, then open [http://127.0.0.1:3000
9191Configure your session and CSRF protection layer in your backend application:
9292
9393``` rust
94+ use async_session :: MemoryStore ;
95+ use axum :: {
96+ body :: Body ,
97+ http :: StatusCode ,
98+ routing :: {get, Router },
99+ };
100+ use axum_csrf_sync_pattern :: {CsrfSynchronizerTokenLayer , RegenerateToken };
101+ use axum_sessions :: SessionLayer ;
94102use rand :: RngCore ;
95103
96104let mut secret = [0 ; 64 ];
97105rand :: thread_rng (). try_fill_bytes (& mut secret ). unwrap ();
98106
99- async fn handler () -> axum :: http :: StatusCode {
100- axum :: http :: StatusCode :: OK
107+ async fn handler () -> StatusCode {
108+ StatusCode :: OK
101109}
102110
103- let app = axum :: Router :: new ()
104- . route (" /" , axum :: routing :: get (handler ). post (handler ))
111+ let app = Router :: new ()
112+ . route (" /" , get (handler ). post (handler ))
105113 . layer (
106- axum_csrf_sync_pattern :: CsrfSynchronizerTokenLayer :: default ()
114+ CsrfSynchronizerTokenLayer :: default ()
107115
108116 // Optionally, configure the layer with the following options:
109117
110118 // Default: RegenerateToken::PerSession
111- . regenerate (axum_csrf_sync_pattern :: RegenerateToken :: PerUse )
119+ . regenerate (RegenerateToken :: PerUse )
112120 // Default: "X-CSRF-TOKEN"
113- . request_header (" X-Custom-CSRF-Token-Client- Request-Header" )
121+ . request_header (" X-Custom-Request-Header" )
114122 // Default: "X-CSRF-TOKEN"
115- . response_header (" X-Custom-CSRF-Token-Server- Response-Header" )
123+ . response_header (" X-Custom-Response-Header" )
116124 // Default: "_csrf_token"
117- . session_key (" _custom_csrf_token_session_key " )
125+ . session_key (" _custom_session_key " )
118126 )
119- . layer (
120- axum_sessions :: SessionLayer :: new (
121- async_session :: MemoryStore :: new (),
122- & secret
123- )
124- );
127+ . layer (SessionLayer :: new (MemoryStore :: new (), & secret ));
125128
126129// Use hyper to run `app` as service and expose on a local port or socket.
127130
@@ -139,7 +142,7 @@ Receive the token and send same-site requests, using your custom header:
139142const test = async () => {
140143 // Receive CSRF token (Default response header name: 'X-CSRF-TOKEN')
141144 const token = (await fetch (" /" )).headers .get (
142- " X-Custom-CSRF-Token-Server- Response-Header"
145+ " X-Custom-Response-Header"
143146 );
144147
145148 // Submit data using the token
@@ -148,7 +151,7 @@ const test = async () => {
148151 headers: {
149152 " Content-Type" : " application/json" ,
150153 // Default request header name: 'X-CSRF-TOKEN'
151- " X-Custom-CSRF-Token-Client- Request-Header" : token,
154+ " X-Custom-Request-Header" : token,
152155 },
153156 body: JSON .stringify ({
154157 /* ... */
@@ -168,32 +171,36 @@ In each example directory, execute `cargo run`, then open [http://127.0.0.1:3000
168171Configure your CORS layer, session and CSRF protection layer in your backend application:
169172
170173``` rust
174+ use async_session :: MemoryStore ;
175+ use axum :: {
176+ body :: Body ,
177+ http :: {header, Method , StatusCode },
178+ routing :: {get, Router },
179+ };
180+ use axum_csrf_sync_pattern :: {CsrfSynchronizerTokenLayer , RegenerateToken };
181+ use axum_sessions :: SessionLayer ;
171182use rand :: RngCore ;
183+ use tower_http :: cors :: {AllowOrigin , CorsLayer };
172184
173185let mut secret = [0 ; 64 ];
174186rand :: thread_rng (). try_fill_bytes (& mut secret ). unwrap ();
175187
176- async fn handler () -> axum :: http :: StatusCode {
177- axum :: http :: StatusCode :: OK
188+ async fn handler () -> StatusCode {
189+ StatusCode :: OK
178190}
179191
180- let app = axum :: Router :: new ()
181- . route (" /" , axum :: routing :: get (handler ). post (handler ))
192+ let app = Router :: new ()
193+ . route (" /" , get (handler ). post (handler ))
182194 . layer (
183195 // See example above for custom layer configuration.
184- axum_csrf_sync_pattern :: CsrfSynchronizerTokenLayer :: default ()
185- )
186- . layer (
187- axum_sessions :: SessionLayer :: new (
188- async_session :: MemoryStore :: new (),
189- & secret
190- )
196+ CsrfSynchronizerTokenLayer :: default ()
191197 )
198+ . layer (SessionLayer :: new (MemoryStore :: new (), & secret ))
192199 . layer (
193- tower_http :: cors :: CorsLayer :: new ()
194- . allow_origin (tower_http :: cors :: AllowOrigin :: list ([" https://www.example.com" . parse (). unwrap ()]))
195- . allow_methods ([axum :: http :: Method :: GET , axum :: http :: Method :: POST ])
196- . allow_headers ([axum :: http :: header :: CONTENT_TYPE , " X-CSRF-TOKEN" . parse (). unwrap ()])
200+ CorsLayer :: new ()
201+ . allow_origin (AllowOrigin :: list ([" https://www.example.com" . parse (). unwrap ()]))
202+ . allow_methods ([Method :: GET , Method :: POST ])
203+ . allow_headers ([header :: CONTENT_TYPE , " X-CSRF-TOKEN" . parse (). unwrap ()])
197204 . allow_credentials (true )
198205 . expose_headers ([" X-CSRF-TOKEN" . parse (). unwrap ()]),
199206);
0 commit comments