CORS 登录到 expressjs/passportjs 应用程序 401 未经授权

Posted

技术标签:

【中文标题】CORS 登录到 expressjs/passportjs 应用程序 401 未经授权【英文标题】:CORS Logging into an expressjs/passportjs app 401 Unauthorized 【发布时间】:2014-07-06 04:06:18 【问题描述】:

我正在将 Web 应用程序转换为 cordova 应用程序,唯一阻止我的是该应用程序是基于 expressjs 的,因为 cordova 需要 index.html 我需要使用 CORS 来呈现应用程序并提供登录会话。

我可以将 ajax/CORS 用于常规页面,但在授权方面我被卡住了。

我使用 passportjs 在此 POST 路由 app.post('/login', passport.authenticate('local-login')); 上进行身份验证,因此在我的客户端 Cordova 应用程序上我进行了 ajax 调用来为我提出此请求。

$('body').on('submit', '#logIn', function(e)
    e.preventDefault();

    var formData = $(this).serialize();
    console.log(formData);

    $.ajax(
        url: "http://mysite.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);
        
    );

);

当我发出 POST 请求时,我得到了一个 401 Unauthorized,所以我一直在研究它,但我仍然不确定为什么它没有授权?

【问题讨论】:

【参考方案1】:

来自Passport docs:

默认情况下,如果身份验证失败,Passport 将响应 401 Unauthorized 状态,并且不会调用任何其他路由处理程序。

您发布的用户名/密码组合无效。

【讨论】:

哦,好的,再次感谢我会专注于确保正确发送用户/通行证。 很好,修复了它...哇希望我能更加注意我将JSON.stringify(formData) 更改为formData 愚蠢的错误.. 现在帖子就在那里,我需要做吗另一个 ajax 请求成功或在服务器上发送数据? 通过 AJAX 成功验证不会刷新页面。如果你想改变某些东西,你必须自己改变它。 是的,我已经解决了,抱歉,这只是我把头绕过去的问题。谢谢 没问题。您在神奇的编程之旅中又学到了一件事!

以上是关于CORS 登录到 expressjs/passportjs 应用程序 401 未经授权的主要内容,如果未能解决你的问题,请参考以下文章

angularJS发布CORS

使用 IE11 的 CORS 请求

CORS 请求 - 为啥不发送 cookie?

没有将 Cors 标头添加到响应中

axios POST 请求到后端时出现 CORS 错误

使用 CORS 登录 expressjs 应用程序