2014-01-12 1 views
4

Google 드라이브 (app/models/contact.rb)의 내 계정에있는 스프레드 시트에 양식에서 제출 된 데이터를 연결하고 저장하는 방법이있는 연락처 컨트롤러가 있습니다 :잘못된 인증 오류 Google 드라이브에 연결하는 레일

def update_spreadsheet 
    connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"]) 
    ss = connection.spreadsheet_by_title('Learn-Rails02-Example') 
    if ss.nil? 
     ss = connection.create_spreadsheet('Learn-Rails02-Example') 
    end 

방법은 내가 다음과 같이 설정/환경/development.rb 저장됩니다 피가로로 설정 환경 변수에 호출

GMAIL_USERNAME: [email protected] 
GMAIL_PASSWORD: Paxxword (obviously this is a place holder for my actual password in the .yml file) 

나는 다음과 같은 오류가 내 양식을 제출하면 :

를,
*GoogleDrive::AuthenticationError at /contacts 
Authentication failed for tgolsby: Response code 403 for post https://www.google.com/accounts/ClientLogin: Error=BadAuthentication* 

이 연락처 모델에 다음 줄을 가리키는 :

*def update_spreadsheet* 
    **connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])** 
    *ss = connection.spreadsheet_by_title('Learn-Rails02-Example') 
    if ss.nil? 
     ss = connection.create_spreadsheet('Learn-Rails02-Example') 
    end* 

나는 확인하고 사용자 이름과 암호를 다시 확인해 그들이 application.yml 파일에서 정확한 100 % 확신했다. 튜토리얼을 끝내고 모든 단계를 반복했지만 앱이 Google에 연결하는 데 문제가있는 이유를 파악할 수 없습니다. 또한 Google 계정에 2 단계 인증을 설정하지 않았는지 확인했습니다.

+0

로컬 컴퓨터에서이 작업을 시도하고 있습니까? 또는 Heroku에 배치 되었습니까? 지역적으로 자격 증명을 하드 코드하여 ENV 변수를 설정하지 않아도 문제가 없는지 확인할 수 있습니다. 내 "Learn Ruby on Rails"책의 코드를 사용하고 있습니다. Gmail 연결 (동일한 자격 증명)을 사용하여 메일을 성공적으로 보낼 수 있었습니까? –

+0

Daniel에게 돌아가 줘서 고마워. :) 예. webrick 서버로 로컬 컴퓨터에서 이걸 시도해보십시오. "Learn Ruby on Rails"의 모든 코드를 사용했다면 프로젝트의 이름을 'learn-rails02'로 바꿨다. 그래서 각 파일에서 적절하게 이름을 조정했다. 메일이 전송됩니다 (컨트롤러에서 스프레드 시트 메소드를 제거한 경우에만 멈추지 않습니다). 나는 browsaer에서 알림을받습니다. 로그에 Gmail 주소에서 보낸 메일과 정확한 이메일 주소가 들어 있지만받은 편지함에는 메일이 도착하지 않는다고합니다. – user3186432

+0

webrick 서버를 다시 시작했습니다. 이제는 메일과 스프레드 시트 모두 제대로 작동하는 것 같습니다. 건배, 팀 – user3186432

답변

2

코드가 좋다 (예제 응용 프로그램 learn-rails에서 확인할 수 있음). Learn Ruby on Rails의 코드와 정확히 같습니다.

즉, 문제는 환경 또는 구성 문제로 인한 것입니다.

먼저 로컬로 실행하고 있습니까, 아니면 Heroku에 배포 한 후에 문제가 있습니까?

1) 웹 서버를 다시 시작하십시오 :

로컬로 실행되는 경우 다음 문제를 해결하려고 할 수있는 일이다. 구성 파일을 변경하면 서버를 다시 시작해야합니다.

2) 코드에서 ENV["..."]을 바꾸고 자격 증명을 직접 사용하십시오 ("자격 증명 하드 코드"). 하드 코드 된 자격 증명으로 코드를 git repo에 체크인하지 않도록주의하십시오 (자격 증명을 노출하므로 GitHub으로 푸시하지 마십시오).

3) 응용 프로그램에서 전자 메일을 보낼 수 있습니까? 스프레드 시트를 업데이트하는 코드를 주석 처리하고 자격 증명이 맞으면 전자 메일을 보낼 수 있어야합니다.

3

내가 가진 것과 동일한 문제가있을 수 있습니다. 나는 1 년이 넘지 않은 개인 프로젝트에서 google_drive gem을 사용하여 Google 문서에 액세스하고있었습니다. session = GoogleDrive.login('[email protected]', 'password')을 사용하여 세션을 사용하도록 설정하여 내 Google 문서에 액세스 할 수 있었지만 지금과 동일한 오류가 발생했습니다.

비밀번호를 사용하여 해당 계정에 로그인하고 "로그인 차단됨"이라는 제목의 이메일을 보았습니다. https://www.google.com/settings/security/lesssecureapps 링크를 따라 해당 계정에 대한 보안 수준이 낮은 앱 액세스를 허용하고 동일한 코드를 사용하여 세션을 로컬로 활성화 할 수있었습니다. 귀하의 Google 계정을 확인하고 이메일을 받았는지 확인하거나 덜 안전한 앱 액세스를 사용하도록 설정 한 다음 다시 시도하십시오.

0

나는이 문제도 가지고 있었고 ENV [ "GMAIL_PASSWORD"] 코드를 제 연락처 모델의 모든 대문자를 제 환경으로 만드는 것으로 해결할 수있었습니다. 코드에서 첫 번째 문자 대문자가 있지만 env 변수의 대소 문자가 모두있는 경우 작동하지 않으므로 환경의 대소 문자를 구분해야합니다.

관련 문제