2012-01-03 2 views
1

omniauth google-oauth2 전략으로 오프라인 액세스 토큰 (refresh_token)을 가져 오려고합니다.오프라인 액세스로 Omniauth Google oauth2 전략

이 내 omniauth 초기화 코드는 다음으로 OAuth2 인증을 위해 Google에 리디렉션 할 때

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, KEY, SECRET, 
    :access_type => 'offline', 
    :scope => 'https://www.googleapis.com/auth/userinfo.profile' 
end 

, 그것은 & access_type = 오프라인과 같은 추가 URL 매개 변수를 추가해야하지만, 그렇게하는 것이 실패 (그것을 잘 작동합니다 수동으로 매개 변수를 추가하는 경우).

내가 누락 된 항목이 있습니까?

+0

어떻게 KEY와 SECRET을 얻습니까? – Thufir

답변

1

zquestz/omniauth-google-oauth2를 버전 0.1.8로 업그레이드하여이 문제를 해결했습니다. 분명히이 문제는 0.1.7에서만 발생합니다.

2

zquestz의 google_oauth2 전략에서 Omniauth를 사용하는 경우 access_type의 기본값은 지정하지 않으면 오프라인입니다.

내가 범위 필드가 해시에 있어야하는데 생각 보조 노트로
def authorize_params 
    base_scope_url = "https://www.googleapis.com/auth/" 
    super.tap do |params| 
     scopes = (params[:scope] || DEFAULT_SCOPE).split(",") 
     scopes.map! { |s| s =~ /^https?:\/\// ? s : "#{base_scope_url}#{s}" } 
     params[:scope] = scopes.join(' ') 
     # This makes sure we get a refresh_token. 
     # http://googlecode.blogspot.com/2011/10/upcoming-changes-to-oauth-20-endpoint.html 
     **params[:access_type] = 'offline' if params[:access_type].nil? 
     params[:approval_prompt] = 'force' if params[:approval_prompt].nil?** 
    end 
    end 

: {: 범위 => userinfo.profile * omniauth/전략/OAuth2를/google_oauth2 * 자신의 GitHub의에서

}.

+0

네, 맞아요. 분명히 zquestz/omniauth-google-oauth2의 버전 0.1.7이 기본값에 문제가있었습니다. 나는 버전 0.1.8로 업그레이드하여이 문제를 해결했다. –