20

I'm getting this URL after I'm authenticated to Google

http://localhost:3000/_oauth/google#access_token=ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw&token_type=Bearer&expires_in=3600 

How to get access_token value from this url?

I tried solutions in following urls, none of them are working

How can I get query string values in JavaScript?

How to get the value from the GET parameters?

Using the GET parameter of a URL in JavaScript

0

2 Answers 2

27

Using modern ways, there are better, more reliable ways to get access token field:

var urlString = 'http://localhost:3000/_oauth/google#access_token=ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw&token_type=Bearer&expires_in=3600'; var url = new URL(urlString); // OR: If you want to use the current page's URL var url = window.location; var access_token = new URLSearchParams(url.search).get('access_token'); 

You can also see how this approach makes it easy to get the other parameters in addition. This URLSearchParams approach is supported by all browsers except old instances of IE.


If the above doesn't work (didn't for me) just add 'hash' to window.location, this is also single line code

var access_token = new URLSearchParams(window.location.hash).get('access_token'); 

Old Answer:

I like RegEx so here's a RegEx answer:

var url = 'http://localhost:3000/_oauth/google#access_token=ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw&token_type=Bearer&expires_in=3600', access_token = url.match(/\#(?:access_token)\=([\S\s]*?)\&/)[1]; 

access_token is:

ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw

(Directly from the console)

Fiddle

Sign up to request clarification or add additional context in comments.

2 Comments

I love Regex too! Nice answer
how do you get the token_type and the other url parameters?
8

Make use of the URL class in JS:

var token = new URL("http://localhost:3000/_oauth/google#access_token=ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw&token_type=Bearer&expires_in=3600").hash.split('&').filter(function(el) { if(el.match('access_token') !== null) return true; })[0].split('=')[1]; alert(token);

3 Comments

seems to include &token_type at the end
Fixed it. Added in a little bit of regex spice and some peppery smooth filtering
Instead of new URL(...), can use document.location as well in above expression.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.