0

Мой проект - это искровой проект java, который я разместил на геройку. Часть проекта требует, чтобы я загрузил конкретный файл с моего диска Google в приложение. Мне удалось настроить все, когда приложение было запущено локально, но как только я развернул приложение, он перестал работать. Это было независимо от того, что, когда приложение выполнялось локально, я использовал идентификатор клиента Oauth2 типа other, и когда я развернул приложение, я создал новое однотипное веб-приложение.google drive Oauth 2.0 для java веб-приложения

Ниже приведен фрагмент аутентификации и загрузки кода:

public class AutoCalls { 

    /** Application name. */ 
    private static final String APPLICATION_NAME = "calls-made"; 
    private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("target/classes/auth"), ".credentials/calls-made"); 
    private static FileDataStoreFactory DATA_STORE_FACTORY; 
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
    private static HttpTransport HTTP_TRANSPORT; 
    private static final List<String> SCOPES = Arrays.asList(DriveScopes.DRIVE); 

    static { 
     try { 
      HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
      DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 

     } catch (GeneralSecurityException | IOException t) { 
      System.exit(1); 
     } 
    } 

    public static void startDownload() throws IOException, ParseException { 

     Drive serv = getDriveService(); 
    // drive stuff deleted 
    } 

    public static Credential authorize() throws IOException { 
     InputStream in = new FileInputStream("target/classes/auth/client_secret_*****************************************.apps.googleusercontent.com.json"); 
     GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 
     GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
      .setDataStoreFactory(DATA_STORE_FACTORY) 
      .setAccessType("offline") 
      .build(); 
     Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 
     System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
     return credential; 
    } 

    public static Drive getDriveService() throws IOException { 
     Credential credential = authorize(); 

     return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
      .setApplicationName(APPLICATION_NAME) 
      .build(); 
    } 
} 

В настоящее время, когда я пытаюсь начать загрузку я получаю URL в Heroku регистрирует следующим образом:

2017-02-20T10:32:28.656820+00:00 app[web.1]: Please open the following address in your browser: 
2017-02-20T10:32:28.656908+00:00 app[web.1]: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=************-vvdi7u6bmp1vc90sdidtnuiftdi1t49c.apps.googleusercontent.com&redirect_uri=http://localhost:48085/Callback&response_type=code&scope=https://www.googleapis.com/auth/drive 

Когда я попробуйте ввести URL-адрес в браузере. Я получаю сообщение об ошибке:

Error: redirect_uri_mismatch 

Не могу найти качественного поэтажного репетитора ial при доступе к содержимому диска google в веб-приложении java, поэтому любая помощь будет устранена.

ответ

0

Как правило, если OAuth работает на сервере-A, но не на сервере-B, это связано с тем, что URL-адрес перенаправления не настроен правильно на консоли API. Нет причин, по которым вам нужно будет использовать другой идентификатор клиента, поскольку один идентификатор клиента может быть настроен с несколькими URL-адресами, например, ваш локальный хост и ваш сервер heroku. Другая возможность - использование https.

В вашем коде есть отдельная проблема, где вы итерации на lista.isEmpty(). Вы должны повторить на nextPageToken != null. См. Ответ на вопрос Google drive rest API, Download files from root folder only

+0

Является ли факт, что я запускал приложение локально, а затем перенес его в Heroku, не имеет импликации? Я спрашиваю, потому что идентификаторы клиентов могут быть для веб-приложений и других (для настольных приложений, у которых нет URL-адресов переадресации, например) и т. Д. Идентификатор клиента, который работал, был другого типа и, следовательно, не принимал URL-адреса переадресации. – Chognificent

+0

Я не понимаю, почему вы изменили тип клиента. Разумеется, ваша заявка должна быть одинаковой при тестировании, поскольку она находится в производстве. Таким образом, стандартным подходом является просто наличие единого идентификатора клиента с URL-адресами переадресации как для вашей тестовой среды, так и для вашей производственной среды. Либо я неправильно понял, чего вы пытаетесь достичь, либо неправильно понимаете типы OAuth/client где-то на этом пути. – pinoyyid

+0

Я изменил свой тип клиента, потому что тот, который я использовал (другой), который не разрешает URL-адрес переадресации, поэтому не работал. – Chognificent

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