@@ -80,7 +80,7 @@ use crate::{
8080 async_trait, join, Context , Error , Middleware , Next , Result , State , SyncContext ,
8181} ;
8282use headers:: { authorization:: Bearer , Authorization , HeaderMapExt } ;
83- use jsonwebtoken:: { dangerous_unsafe_decode , decode} ;
83+ use jsonwebtoken:: decode;
8484use serde:: de:: DeserializeOwned ;
8585use serde_json:: Value ;
8686use std:: sync:: Arc ;
@@ -185,15 +185,14 @@ where
185185 where
186186 C : ' static + DeserializeOwned ,
187187 {
188- let token = self . load_scoped :: < JwtScope , Bearer > ( "token" ) ;
189- match token {
190- Some ( token) => dangerous_unsafe_decode ( token. token ( ) )
191- . map ( |data| data. claims )
188+ let value = self . load_scoped :: < JwtScope , Value > ( "value" ) ;
189+ match value {
190+ Some ( claims) => serde_json:: from_value ( ( * claims) . clone ( ) )
192191 . map_err ( |err| {
193192 Error :: new (
194193 StatusCode :: INTERNAL_SERVER_ERROR ,
195194 format ! (
196- "{}\n token deserialized fails, this maybe a bug of JwtGuard." ,
195+ "{}\n Claims value deserialized fails, this may be a bug of JwtGuard." ,
197196 err
198197 ) ,
199198 false ,
@@ -229,10 +228,11 @@ impl<S: State> Middleware<S> for JwtGuard {
229228 . typed_get :: < Authorization < Bearer > > ( )
230229 . ok_or_else ( || unauthorized ( "" ) ) ?
231230 . 0 ;
232- decode :: < Value > ( bearer. token ( ) , & self . secret , & self . validation )
231+ let value = decode :: < Value > ( bearer. token ( ) , & self . secret , & self . validation )
233232 . map_err ( unauthorized) ?;
234233 ctx. store_scoped ( JwtScope , "secret" , self . secret . clone ( ) ) ;
235234 ctx. store_scoped ( JwtScope , "token" , bearer) ;
235+ ctx. store_scoped ( JwtScope , "value" , value. claims ) ;
236236 next. await
237237 }
238238}
0 commit comments