gpt4 book ai didi

node.js - 如何使用axios通过OAuth登录

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:53 25 4
gpt4 key购买 nike

我上周刚刚开始通过 Brad Traversy 的 MERN 类(class)学习 MERN 堆栈:https://www.udemy.com/mern-stack-front-to-back/在类(class)中,他将前端和后端分离,并使用后端作为REST API。在后端,他有一个 POST 路由(/api/auth),返回 JWT token ,并且该 API 在 React 应用程序 axios 中使用。然后,将响应用作 header x-auth-token 的值,以便身份验证中间件可以帮助进行身份验证。作为一名正在实习的计算机科学新手,我需要为我的公司制作一个网络应用程序供内部使用,该应用程序使用 slack OAuth 进行身份验证。现在问题是:当我使用 axios 时,响应是一些如下 HTML 代码:

GET https://slack.com/oauth/authorize? 
scope=identity.basic,identity.email,identity.avatar&client_id=48321353297.675712837139 in postman, result:

<!DOCTYPE html>
<html lang="en-US" class="">
<head>
<script type="text/javascript">
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'gtm.start': Date.now(),
'event' : 'gtm.js',
'secure_page' : false,
});
var firstScript = document.getElementsByTagName('script')[0];
var thisScript = document.createElement('script');
thisScript.async = true;
thisScript.src = '//www.googletagmanager.com/gtm.js?id=GTM-KH2LPK';
firstScript.parentNode.insertBefore(thisScript, firstScript);
</script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function(e) {
var gtmDataLayer = window.dataLayer || [];
var gtmTags = document.querySelectorAll('*[data-gtm-click]');
var gtmClickHandler = function(c) {
var gtm_events = this.getAttribute('data-gtm-click');
if (!gtm_events) return;
var gtm_events_arr = gtm_events.split(",");
for(var e=0; e < gtm_events_arr.length; e++) {
var ev = gtm_events_arr[e].trim();
gtmDataLayer.push({ 'event': ev });
}
};
for(var g=0; g < gtmTags.length; g++){
var elem = gtmTags[g];
elem.addEventListener('click', gtmClickHandler);
}
});

</script>
<script type="text/javascript">
(function(e,c,b,f,d,g,a){e.SlackBeaconObject=d;
e[d]=e[d]||function(){(e[d].q=e[d].q||[]).push([1*new Date(),arguments])};
e[d].l=1*new Date();g=c.createElement(b);a=c.getElementsByTagName(b)[0];
g.async=1;g.src=f;a.parentNode.insertBefore(g,a)
})(window,document,"script","https://a.slack-edge.com/bv1-6-8cacda2/slack_beacon.bc058f2eca7b7d633d5a.min.js","sb");
window.sb('set', 'token', '3307f436963e02d4f9eb85ce5159744c');
sb('set', 'user_' + "batch", "signup_api");sb('set', 'user_' + "created", "2019-06-03");sb('set', 'user_id', "UK781P40Y");
sb('set', 'name_tag', "wemine" + '/' + "klaus.chau");
window.sb('track', 'pageview');
</script>
<meta charset="utf-8">
<script type="text/javascript">window.location.href = "https:\/\/slack.com\/oauth\/authorize?scope=identity.basic,identity.email,identity.avatar&client_id=48321353297.675712837139&tracked=1";</script>
</head>
<body></body>
</html>

我认为问题在于它向我发送了“确认登录页面”,而不是我从重定向URI 需要的 jwt token 。即使我没有使用密码和电子邮件登录,我是否可以像 Brad 在类(class)中所做的那样实现?谢谢可以引用的资源: https://github.com/bradtraversy/devconnector_2.0/blob/master/routes/api/auth.js https://github.com/bradtraversy/devconnector_2.0/blob/master/client/src/actions/auth.js https://github.com/bradtraversy/devconnector_2.0/blob/master/client/src/reducers/auth.js

最佳答案

您无法使用 Ajax(axiosrequestXMLHttprequest)获取 OAuth 或任何外部身份验证 token 。因为这里是流程,

  1. 您点击登录按钮
  2. 转到护照(或任何身份验证)路线。
  3. 身份验证提供商重定向到原始 OAuth 提供商(例如 fb、google、slack 等)
  4. 您在他们的网站上登录。
  5. 它会重定向回护照申请的另一条路线,该路线将解密请求正文并获取 token 。
  6. 它返回 token 。

因此,基本上,要使重定向(第 3 步)发挥作用,您需要重定向或使用 href 到 Passport 路由(这将是 GET 路由),这将反过来重定向到 google/fb/slack。

希望您理解为什么不能使用 Ajax 从外部身份验证提供程序获取数据。

关于node.js - 如何使用axios通过OAuth登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57051175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com