gapi.auth2 can not get access_token
Asked Answered
S

2

5

I'm trying to implement resumable uploads for youtube using the javascript client API. I've managed to get the login working using the g-signin2 button, but I can't get the access_token to send with the requests. This is how I render the sign in button:

<span
  class="g-signin2"
  data-onsuccess="youtubeUploaderSigninCallback"
  data-scope="https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube">
</span>

And I'm using the following script files loaded from google (I can't seem to get one working without the other)

<script src="https://apis.google.com/js/platform.js" async defer></script>
<script src="https://apis.google.com/js/client.js" async defer></script>

I'm using code edited samples from https://developers.google.com/youtube/v3/code_samples/javascript#upload_video for resumable uploads using XHR. But these examples use the auth functions marked as deprecated here: https://developers.google.com/api-client-library/javascript/reference/referencedocs So the main thing I changed is using the auth2 and g-signin2 instead of result.access_token and g-signin.

So I've been trying to use the auth2 functions to get the access tokens, but the access_token property is undefined when I execute the following code

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse()

The way I'm trying to get the access token is documented here: https://developers.google.com/api-client-library/javascript/features/cors#making-authenticated-requests

So these are my options, I guess:

  1. find a way to get the access token out of the user object
    • (I found that user.hg.access_token contains the token I need
    • but "hg" seems a minified property to me
    • so I'm not intending to use this as it might change with updates
    • EDIT: as pointed out in the comments hg is a minified property indeed and now no longer exists
  2. add progress events to gapi.client.request()
    • but the xhr object doesn't seem to be exposed
  3. use code documented as deprecated

Can anyone help me with this? I've been looking for an acceptable solution for a few hours and I feel like crying now... all alone and desperate.

Thanks in advance, Robbe

PS: I've also posted this question on google groups

Singultus answered 3/8, 2016 at 18:36 Comment(4)
FYI: I am now using the "g-signin" button (not g-signin2) and everything works, but I don't know if this is very future proof. So answers are still welcome.Singultus
I wish you the best of luck in finding an answer. According to developers.google.com/identity/sign-in/web/…, the AuthResponse is supposed to have an access token. Strange that it's not there.Aldine
I implemented the same thing with g-signin2, and I did use hg, but it proved you right: the property is gone now and and is renamed to Zi. Still looking for a way to properly fetch it from the response.Kioto
For now I'm just sticking with the g-signin option. This is still working and I hope it stays that way until g-signin2 is "fixed". Glad I did not depend on the hg property. Thanks for sharing, I'll put this in the question.Singultus
O
13
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token
Ortega answered 14/6, 2018 at 19:17 Comment(3)
To improve your answer, you should add some explanation of what your answer does, how to use it and how it answers the question.Outlawry
stackoverflow.com/posts/50864432 getAuthResponse(true) without true the access token is undefinedHenig
Thanks for the above comment! most documentation doesn't include the true parameter. That solved my problemLuncheon
S
0

This snippet is working perfectly

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token

etc...

Schonfeld answered 1/5 at 14:28 Comment(1)
Isn't this the same answer provided in 2018?Boardman

© 2022 - 2024 — McMap. All rights reserved.