使用 CORS 登录 expressjs 应用程序
Posted
技术标签:
【中文标题】使用 CORS 登录 expressjs 应用程序【英文标题】:Logging into an expressjs app with CORS 【发布时间】:2014-07-06 03:34:00 【问题描述】:我有 expressjs 坐在 nodejs 服务器上,我有一个客户端 cordova 应用程序向某些路由发出 ajax 请求。
这很好,直到我需要使用 passportjs 发出 POST 请求登录,发生了 302 重定向,所以我在拨打这个电话时得到了这个 302 Moved Temporarily
$('body').on('submit', '#logIn', function(e)
e.preventDefault();
var formData = $(this).serialize();
$.ajax(
url: "http://mydomain.io:3300/login",
data: JSON.stringify(formData),
type: "POST",
crossDomain: true,
dataType: "json",
async: true,
success: function(response)
alert('succeeded!');
console.log(response);
alert(response);
,
failure: function(message)
alert("failed");
console.log(message);
alert(message);
);
);
所以我的问题是如何使用 CORS 使用客户端 ajax 登录到应用程序?
【问题讨论】:
我不认为 CORS 是您的问题。您不应该使用护照通过 AJAX 登录 我觉得这并不理想,但我想不出任何其他方式,因为该应用程序是基于 expressjs 的,现在我将它转换为一个 cordova/phonegap 应用程序,这是我唯一能做的想想。 【参考方案1】:CORS 不是你的问题。
Passport 想要重定向您的用户(基于您传递给passport.authenticate
的值)。例如:
app.get('/auth/facebook/callback',
passport.authenticate('facebook', successRedirect: '/',
failureRedirect: '/login' ));
Passport 将通过返回302
告诉浏览器重定向到/
或/login
。您可以通过删除passport.authenticate
的第二个参数来删除重定向:
app.get('/auth/facebook/callback',
passport.authenticate('facebook'));
这将在认证成功时调用next()
(否则返回401
)。
此处的示例使用FacebookStrategy
,但它适用于任何策略。
【讨论】:
哦哇,有道理,我真的没想到整个过程。现在试试看:) @MichaelJosephAubry 没问题 - 如果这回答了您的问题,请不要忘记投票/接受。 我当然会尝试一下,因为我可能有一些基本问题,我首先使用的是本地策略而不是 oauth facebook 策略(至少现在不是)我只是去掉了 successRedirect回调并有这样的 post 方法app.post('/login', passport.authenticate('local-login');
?
太棒了,很高兴我能帮上忙。
好的,我得到了 401,但它出现了 401 Unauthorized
我会接受这个并对该错误进行研究。谢谢以上是关于使用 CORS 登录 expressjs 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求