Node.js 如何使用axios登录OAuth
上周,我刚开始通过Brad Traversy的MERN课程学习MERN stack: 在本课程中,他将前端和后端分离,并将后端用作RESTAPI。在后端,他有一个POST路由(/api/auth),返回一个JWT令牌,该api用于react应用程序axios。然后,响应用于头x-auth-token的值,以便身份验证中间件可以帮助进行身份验证。作为一名正在实习的计算机科学新手,我需要为我的公司制作一个内部使用的web应用程序,该应用程序使用slack OAuth进行身份验证。现在问题来了:当我使用axios时,响应是一些HTML代码,如下所示:Node.js 如何使用axios登录OAuth,node.js,reactjs,mongodb,express,oauth-2.0,Node.js,Reactjs,Mongodb,Express,Oauth 2.0,上周,我刚开始通过Brad Traversy的MERN课程学习MERN stack: 在本课程中,他将前端和后端分离,并将后端用作RESTAPI。在后端,他有一个POST路由(/api/auth),返回一个JWT令牌,该api用于react应用程序axios。然后,响应用于头x-auth-token的值,以便身份验证中间件可以帮助进行身份验证。作为一名正在实习的计算机科学新手,我需要为我的公司制作一个内部使用的web应用程序,该应用程序使用slack OAuth进行身份验证。现在问题来了:当我使
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>
GEThttps://slack.com/oauth/authorize?
范围=identity.basic,identity.email,identity.avatar&client_id=48321353297.675712837139在邮递员中,结果:
window.dataLayer=window.dataLayer | |[];
window.dataLayer.push({
“gtm.start”:Date.now(),
“事件”:“gtm.js”,
“安全页面”: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);
document.addEventListener(“DOMContentLoaded”,函数(e){
var gtmDataLayer=window.dataLayer | |[];
var gtmTags=document.querySelectorAll('*[data gtm click]');
var gtmClickHandler=函数(c){
var gtm_events=this.getAttribute('data-gtm-click');
如果(!gtm_事件)返回;
var gtm_events_arr=gtm_events.split(“,”);
对于(var e=0;e
我认为问题在于它发送给我的是“确认登录页面”,而不是我需要的重定向URI中的jwt令牌。
即使我没有使用密码和电子邮件登录,我是否可以像Brad在课程中所做的那样实现?
谢谢
可供参考的资源:
您无法
Ajax
(axios
或request
或XMLHttprequest
)获取OAuth或任何外部身份验证令牌。因为这里是流程
登录
按钮希望您理解为什么不能使用Ajax从外部身份验证提供商获取数据。lookup
passportjs
和相关策略(例如slack策略)Hi Arita,我曾尝试在代码中实现它,但我仍然想知道如何使用axios从与原始链接不同的链接获取数据(例如,我想调用GET api/auth并从api/auth/redirect获取返回数据)。非常感谢。如果有帮助,请单击灰色勾号接受答案