如何在Javascript中获取Google相册的JSON列表?

hrirmatl  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(157)

我试图建立一个基于Express.js的网站,当我导航到某个页面,抓取相册列表,链接,id,等等。我有一个服务帐户与所有权限。我的Javascript是:

const oauth2Client = new google.auth.OAuth2(
  config.serviceAccount.client_id,
  config.oAuthclientSecret,
  config.oAuthCallbackUrl
);

google.options({auth: oauth2Client});

function getAlbumList(){
    var xhr = new XMLHttpRequest();
    var url = "https://photoslibrary.googleapis.com/v1/albums"
    xhr.open("GET",url,true);

    xhr.onreadystatechange = function () {
        console.log("making xhr")
        if (xhr.readyState == 4 && xhr.status == 200) {
            console.log(xhr);
        }
    }
    xhr.addEventListener('error',function(){
        console.log(xhr.statusMessage)
        console.log("xhr.status is ", xhr.status )
        console.log("ERROR");
    })
    xhr.addEventListener('timeout',function(){
        console.log("SERVER TIMEOUT")
    })
    // Sending our request 
    xhr.send();

}

但是,我甚至从来没有得到回应。我确实有一个服务帐户,我的凭据是:

{  "type": "service_account",
  "project_id": "myProj",
  "private_key_id": "8dxxxxxx46",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQExxxxxxxxxQ==\n-----END PRIVATE KEY-----\n",
  "client_email": "ihfphotograb@myproj.iam.gserviceaccount.com",
  "client_id": "10xxxxxxxxx6451",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/proj%40myproj.iam.gserviceaccount.com"}

我看过this,但他们没有告诉你如何获得令牌,当我看网络选项卡,看到请求和参数通过。我有const {google} = require('googleapis'),但我不知道如何获得令牌。
我希望服务应用程序做所有的身份验证,所以我的网站的访问者可以看到照片没有身份验证。

x7yiwoj4

x7yiwoj41#

您应该将令牌添加到您的API请求中,否则,您将得到401unauthorized错误。
在index.js文件的底部添加以下代码,使用客户端ID和Secret而不是占位符:

/*  Google AUTH  */
 
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const GOOGLE_CLIENT_ID = 'our-google-client-id';
const GOOGLE_CLIENT_SECRET = 'our-google-client-secret';
passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/google/callback"
  },
  function(accessToken, refreshToken, profile, done) {
      userProfile=profile;
      return done(null, userProfile);
  }
));
 
app.get('/auth/google', 
  passport.authenticate('google', { scope : ['profile', 'email'] }));
 
app.get('/auth/google/callback', 
  passport.authenticate('google', { failureRedirect: '/error' }),
  function(req, res) {
    // Successful authentication, redirect success.
    res.redirect('/success');
  });

大家可以看一下更详细的示例代码here

hgncfbus

hgncfbus2#

在每次请求之前,您需要使用之前生成并保存在某个变量中的令牌,或者在每次向API发送请求时获取刷新令牌。
请遵循此教育课程:
https://hmh.engineering/how-to-get-oauth-access-token-and-retrieve-data-from-google-apis-using-postman-9a95ffe030ae

相关问题