2015-08-30 3 views
1
before_filter :restrict_access 

def restrict_access 
    authenticate_or_request_with_http_token do |token, options| 
    true 
    end 
end 

Здесь вы можете увидеть, что я возвращаюсь всегда верно для authenticate_or_request_with_http_token, так же, как попытка заставить его работать. Однако я столкнулся с чрезвычайно странной проблемой.authenticate_or_request_with_http_token всегда возвращаются ложь с AFNetworking

Я посылаю в Authorization заголовка со значением Token token=token value here

клиент здесь является приложение IOS с помощью AFNetworking.

Когда приложение iOS вызывает это на localhost: 3000, оно работает так, как ожидалось, и я не получаю ошибку 401.

С точно таким же кодом однако, когда я запускаю это на удаленном сервере (Heroku), я получаю 401.

Однако 401 происходит только на удаленном сервере, когда клиент является приложением IOS. Когда вы запускаете это через Paw или Postman, он работает отлично. Это ошеломляет.

Вот код IOS, который устанавливает заголовок авторизации: [self.operationManager.requestSerializer setValue:[NSString stringWithFormat:@"Token token=%@", accessToken] forHTTPHeaderField:@"Authorization"];

Почему работает запрос от IOS Simulator -> LOCALHOST работы просто отлично, но работает один и тот же запрос от IOS Simulator -> Heroku не работает и привести к 401?

И помните, что authenticate_or_request_with_http_token всегда возвращает true. Поэтому мне кажется, что Heroku может изменять формат заголовка авторизации, чтобы он стал недопустимым, и этот блок никогда не вызывается. authenticate_or_request_with_http_token, кажется, возвращает false по умолчанию, если формат заголовка авторизации прикручен, например, если я перехожу в token=432, а не в Token token=432.

+0

У меня такая же проблема. Какое решение ? – Magnum

ответ

0

Выяснил, в чем проблема. По NSURLRequest docs:

ВАЖНО

Класс, NSURLConnection и NSURLSession классы предназначены для обработки различных аспектов протокола HTTP для вас. В результате, вы не должны изменять следующие заголовки:

Авторизация

Коммутация

Хост

WWW-Authenticate

Так что вопрос в том, что вы не предполагается изменить заголовок авторизации. За кулисами кажется, что NSURLRequest изменял заголовок авторизации после того, как я его установил, и освободил его, чтобы он не был доставлен. Не уверен, почему это сделало бы это для Heroku, а не для localhost, но там у вас это есть.

Смежные вопросы