2017-03-24 1 views
0

this wenderlich tutorial을 Swift 3 구문에 적용하여 Heroku에서 호스팅되는 레일 백엔드가있는 iOS를 생성하려고합니다.iOS HTTPS 요청에서 Rails Heroku 디버깅 401 오류

공유 할 수있는 다른 코드가 있는지 알려주세요.하지만 인증 문제인 것처럼 보입니다. 다음은 요청에 대한 인증 헤더가 설정된 위치입니다.

let basicAuthString = "\(HTTPHelper.API_AUTH_NAME):\(HTTPHelper.API_AUTH_PASSWORD)" 
let utf8str = basicAuthString.data(using: String.Encoding.utf8) 
let base64EncodedString = utf8str?.base64EncodedString(options: Data.Base64EncodingOptions()) 

request.addValue("Basic \(base64EncodedString)", forHTTPHeaderField: "Authorization") 

이러한 요청을 디버그하는 방법을 처음부터 알리는 데 문제가 있습니다. 디버거에서 코드를 단계별로 실행하면 요청 객체가 매우 평탄 해 보입니다. 요청을 인쇄하면 URL이 표시됩니다.

heroku 서버에 대한 요청 (이 튜토리얼에서 빌드 됨)은 401을 리턴하고, 어떤 레일 방법에도 들어 가지 않는 것 같습니다.

2017-03-24T20:13:47.022176+00:00 heroku[router]: at=info method=POST path="/api/signin" host=young-retreat-61850.herokuapp.com request_id=9d58e8f4-ee9f-4c73-babd-2a2ee5c82a4f fwd="73.83.200.10" dyno=web.1 connect=1ms service=13ms status=401 bytes=499 protocol=https 
2017-03-24T20:13:47.014605+00:00 app[web.1]: Started POST "/api/signin" for 73.83.200.10 at 2017-03-24 20:13:47 +0000 
2017-03-24T20:13:47.020239+00:00 app[web.1]: Processing by ApiController#signin as */* 
2017-03-24T20:13:47.020279+00:00 app[web.1]: Parameters: {"email"=>"dsadsadsa", "password"=>"[FILTERED]", "api"=>{"email"=>"dsadsadsa", "password"=>"[FILTERED]"}} 
2017-03-24T20:13:47.020671+00:00 app[web.1]: Filter chain halted as #<Proc:[email protected]/app/vendor/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_controller/metal/http_authentication.rb:71> rendered or redirected 
2017-03-24T20:13:47.020791+00:00 app[web.1]: Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms) 
2017-03-24T20:13:47.142925+00:00 app[web.1]: Started POST "/api/signin" for 73.83.200.10 at 2017-03-24 20:13:47 +0000 
2017-03-24T20:13:47.148098+00:00 app[web.1]: Processing by ApiController#signin as */* 
2017-03-24T20:13:47.148134+00:00 app[web.1]: Parameters: {"email"=>"dsadsadsa", "password"=>"[FILTERED]", "api"=>{"email"=>"dsadsadsa", "password"=>"[FILTERED]"}} 
2017-03-24T20:13:47.156450+00:00 app[web.1]: Filter chain halted as #<Proc:[email protected]/app/vendor/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_controller/metal/http_authentication.rb:71> rendered or redirected 
2017-03-24T20:13:47.156647+00:00 app[web.1]: Completed 401 Unauthorized in 8ms (ActiveRecord: 0.0ms) 
2017-03-24T20:13:47.157852+00:00 heroku[router]: at=info method=POST path="/api/signin" host=young-retreat-61850.herokuapp.com request_id=bc270aa1-aeed-40b8-b9a0-3c09a68dec8d fwd="73.83.200.10" dyno=web.1 connect=2ms service=24ms status=401 bytes=458 protocol=https 

가 중첩 된 "API를"키가 같은 PARAMS을 가지고 이상하게 보일해야 : 그것은 단지 권한이없는 401 반환? 이러한 요청을 디버깅 할 때 어떤 방향으로 나아갈 지 불분명합니다. 그들은 찰스와 같은 서비스를 사용할 수 없습니다.

답변

0

바보처럼 느껴져 ...

base64EncodedString은 선택 사항입니다.

수정 :

request.addValue("Basic \(base64EncodedString!)", forHTTPHeaderField: "Authorization") 

나는이 된 URLRequest 방법 요청에 대한 자세한 정보를 얻을 수있었습니다 :

print("request header:\(request.allHTTPHeaderFields)")