【问题标题】:How to get access token from the url [duplicate]如何从 url 获取访问令牌 [重复]
【发布时间】:2015-07-08 04:48:18
【问题描述】:

我在通过 Google 身份验证后获取此 URL

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

如何从该网址获取access_token 值?

我尝试了以下网址的解决方案,但都没有工作

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

【问题讨论】:

    标签: javascript jquery url uri


    【解决方案1】:

    使用现代方式,有更好、更可靠的方式来获取访问令牌字段:

    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');
    

    您还可以看到这种方法如何使获取其他参数变得容易。除了旧的 IE 实例之外,所有浏览器都支持这种URLSearchParams 方法。


    如果上述方法不起作用(对我来说不起作用),只需将“哈希”添加到window.location,这也是单行代码

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

    旧答案:

    我喜欢 RegEx,所以这里有一个 RegEx 答案:

    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 是:

    ya29.5HxuYol1Io8JLeGePDznbfkkwu_PC4uodKwG8_1clFYAn9AgdOV1WGpOTNQP3s76HAsn7Y4zWw

    (直接从控制台)

    Fiddle

    【讨论】:

    • 我也喜欢正则表达式!不错的答案
    • 如何获取token_type和其他url参数?
    【解决方案2】:

    利用JS中的URL类:

    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);

    【讨论】:

    • 最后似乎包含&token_type
    • 已修复。添加了一点正则表达式香料和一些辛辣的平滑过滤
    • 在上面的表达式中也可以使用new URL(...),而不是document.location
    猜你喜欢
    • 2020-03-24
    • 2016-07-18
    • 2011-07-01
    • 1970-01-01
    • 2012-09-16
    • 2013-03-30
    • 2021-11-10
    • 2023-03-07
    • 2012-04-09
    相关资源
    最近更新 更多