Rails с клиентом Google API: значение поля заголовка не может включать CR/LF
ArgumentError in Users::OmniauthCallbacksController#google_oauth2
header field value cannot include CR/LF
Действительно не уверен, откуда эта ошибка.
Я использую ruby 2.5, Rails 5 и google-api-client 0.8.2
Любые идеи, как исправить или какую информацию я могу предоставить, чтобы сделать этот вопрос более информативным?
Обновление: мои журналы показывают это, когда я пытаюсь авторизоваться с помощью API Google
Google::APIClient::Request Sending API request get https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest {"User-Agent"=>"hello U/1.0.0 google-api-ruby-client/0.8.2 Mac OS X/10.13.4\n (gzip)", "Accept-Encoding"=>"gzip", "Content-Type"=>""}
И из моего исследования, CRLF это символы "\r\n", верно?
Так "User-Agent"=>"hello U/1.0.0 google-api-ruby-client/0.8.2 Mac OS X/10.13.4\n
вероятно проблема.
Поэтому мой вопрос будет таким: как мне получить доступ к User Agent в моем запросе, чтобы исправить эту проблему с Rails 5?
1 ответ
При использовании Google::APIClient
, созданный User-Agent может содержать CRLF. Его можно переопределить в конструкторе. Пример:
Google::APIClient.new(application_name: 'Foo', application_version: '1.0', user_agent: 'Foo/1.0 google-api-ruby-client/0.8.6 Linux/4.15.0-65-generic (gzip)')
Вы можете изменить строку user_agent, чтобы удалить CR/LF. Я использую Rails 4.1.8 иgoogle-api-client
версия `
@api_client = Google::APIClient.new(:application_name=>"Chronos", :application_version=>0)
# work around a bug that puts a CR/LF in the user agent string
@api_client.user_agent = @api_client.user_agent.gsub("\n", "")
Обновить гем google-api-client
к версии 0.20.0
. Это решает проблему, но требует внесения других изменений в приложение.