File tree Expand file tree Collapse file tree 3 files changed +22
-1
lines changed Expand file tree Collapse file tree 3 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ const extname = require('path').extname;
1919const  vary  =  require ( 'vary' ) ; 
2020const  only  =  require ( 'only' ) ; 
2121const  util  =  require ( 'util' ) ; 
22+ const  encodeUrl  =  require ( 'encodeurl' ) ; 
2223
2324/** 
2425 * Prototype. 
@@ -260,7 +261,7 @@ module.exports = {
260261  redirect ( url ,  alt )  { 
261262    // location 
262263    if  ( 'back'  ==  url )  url  =  this . ctx . get ( 'Referrer' )  ||  alt  ||  '/' ; 
263-     this . set ( 'Location' ,  url ) ; 
264+     this . set ( 'Location' ,  encodeUrl ( url ) ) ; 
264265
265266    // status 
266267    if  ( ! statuses . redirect [ this . status ] )  this . status  =  302 ; 
Original file line number Diff line number Diff line change 3131    "delegates" : " ^1.0.0"  ,
3232    "depd" : " ^1.1.2"  ,
3333    "destroy" : " ^1.0.4"  ,
34+     "encodeurl" : " ^1.0.2"  ,
3435    "error-inject" : " ^1.0.0"  ,
3536    "escape-html" : " ^1.0.3"  ,
3637    "fresh" : " ~0.5.2"  ,
Original file line number Diff line number Diff line change 22'use strict' ; 
33
44const  assert  =  require ( 'assert' ) ; 
5+ const  request  =  require ( 'supertest' ) ; 
56const  context  =  require ( '../helpers/context' ) ; 
7+ const  Koa  =  require ( '../..' ) ; 
68
79describe ( 'ctx.redirect(url)' ,  ( )  =>  { 
810  it ( 'should redirect to the given url' ,  ( )  =>  { 
@@ -12,6 +14,23 @@ describe('ctx.redirect(url)', () => {
1214    assert . equal ( ctx . status ,  302 ) ; 
1315  } ) ; 
1416
17+   it ( 'should auto fix not encode url' ,  done  =>  { 
18+     const  app  =  new  Koa ( ) ; 
19+ 
20+     app . use ( ctx  =>  { 
21+       ctx . redirect ( 'http://google.com/😓' ) ; 
22+     } ) ; 
23+ 
24+     request ( app . callback ( ) ) 
25+       . get ( '/' ) 
26+       . end ( ( err ,  res )  =>  { 
27+         if  ( err )  return  done ( err ) ; 
28+         assert . equal ( res . status ,  302 ) ; 
29+         assert . equal ( res . headers . location ,  'http://google.com/%F0%9F%98%93' ) ; 
30+         done ( ) ; 
31+       } ) ; 
32+   } ) ; 
33+ 
1534  describe ( 'with "back"' ,  ( )  =>  { 
1635    it ( 'should redirect to Referrer' ,  ( )  =>  { 
1736      const  ctx  =  context ( ) ; 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments