API Google Picker с уже сохраненным именем пользователя и паролем

Я реализовал Google Picker API, который выводит окно с запросом Google authentication, а затем показывает нам все файлы, доступные на Google Диске. все работает нормально.

Но теперь мое требование состоит в том, что мне нужно получить доступ к файлам на диске без этого всплывающего окна аутентификации. Я сохраню имя пользователя и пароль в своей базе данных.

Есть ли способ передать учетные данные пользователя, авторизоваться и получить доступ к файлам?

Мой код:

<script>
  function onApiLoad() {
    gapi.load('auth', { 'callback': onAuthApiLoad });
    gapi.load('picker');
  }

function onAuthApiLoad() {
   window.gapi.auth.authorize({                         
   'client_id': 'xxxx.apps.googleusercontent.com',
   'scope': ['https://www.googleapis.com/auth/drive']
    }, handleAuthResult);
}

var oauthToken;
function handleAuthResult(authResult) {
   if (authResult && !authResult.error) {
      oauthToken = authResult.access_token;
      createPicker();
   }
}


function createPicker() {                    
   var picker = new google.picker.PickerBuilder()
                .addView(new google.picker.DocsUploadView())
                .addView(new google.picker.DocsView())                        
                .setOAuthToken(oauthToken)
                .setDeveloperKey('xxxx')                           
                .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
                .addView(new google.picker.VideoSearchView().setSite(google.picker.VideoSearchView.YOUTUBE))
                .setCallback(pickerCallback)
                .build();
                 picker.setVisible(true);
      }
</script>

person RealSteel    schedule 20.03.2015    source источник
comment
Предупреждение о том, что вы не должны хранить пароли Google без очень-очень веской и конкретной причины. Если это просто проект для себя, это не так уж плохо, но вам действительно не следует делать это для других пользователей.   -  person abraham    schedule 22.03.2015
comment
вы должны хранить токен обновления, а не имя пользователя и пароль. Это точка открытой аутентификации.   -  person DaImTo    schedule 15.04.2015


Ответы (2)


При создании средства выбора, т.е. createpicker(), отправьте токен доступа, чтобы он не запрашивал экран согласия. В вашем коде измените createpicker() на createPicker(oauthToken). Пожалуйста, найдите пример фрагмента кода:

function createPicker(token) {
 if (pickerApiLoaded && token) {


 var picker = new google.picker.PickerBuilder()
       .addView(new google.picker.DocsView().setIncludeFolders(true)) //All files and Folders            

     .setOAuthToken(token)//Access Token

     .setDeveloperKey(DEVELOPER_KEY)
     .setCallback(pickerCallback)
     // Instruct Picker to fill the dialog, minus 2 pixels for the border.
     .setSize(DIALOG_DIMENSIONS.width ,
         DIALOG_DIMENSIONS.height )
     .build();
 picker.setVisible(true);
} else {
 showError('Unable to load the file picker.');
}
}
person SGC    schedule 20.03.2015
comment
как мы можем получить этот pickerApiLoaded= true ? - person RealSteel; 15.07.2015
comment
@SGC Это не решает проблему. Я сталкиваюсь с аналогичной проблемой. Даже после отправки токена доступа появляется экран аутентификации, где вы должны указать имя пользователя и пароль. - person ot954; 03.01.2020

Попробуйте следующий код, передав свой access_token..

    function createPicker(access_token) {
 if (access_token) {
  var picker = new google.picker.PickerBuilder()
            .addView(new google.picker.DocsUploadView())
            .addView(new google.picker.DocsView())                        
            .setOAuthToken(access_token)
            .setDeveloperKey('xxxx')                           
            .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
            .addView(new google.picker.VideoSearchView().setSite(google.picker.VideoSearchView.YOUTUBE))
            .setCallback(pickerCallback)
            .build();
             picker.setVisible(true);
} else {
 showError('Unable to load the file picker.');
}
}
person dlohani    schedule 24.06.2016