Angular.js 401 未授权状态码

Angular.js 401 Unauthorized Status Code

我想获取访问令牌以进行身份​​验证。我的 post 结果像

POST https://staj-io-goldenilkay92-1.c9.io/api/v1/oauth/token 401(未授权)

但是当我尝试 post 与 postman 时它起作用了。

服务器端Headers

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.header('Content-Type', 'application/json');

Angular代码

服务

function signIn(data) {

    var deferred = $q.defer();


    $http.post('https://staj-io-goldenilkay92-1.c9.io/api/v1/oauth/token', data,
        {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}
    )
        .success(function (response, status, headers, config) {
            deferred.resolve(response);
        }).error(function () {
            deferred.reject("Failed to login");
        });

    return deferred.promise;

}

控制器

  vm.loginData = {

    'client_id': 'client',
    'client_secret': 'client',
    'grant_type': 'password',
    'username': '',
    'password': ''
};


vm.login = function login() {

    loginService.signIn(vm.loginData).then(function (result) {
            vm.signInResult = result;

        },
        function (data) {

        });


}

POST https://staj-io-goldenilkay92-1.c9.io/api/v1/oauth/token 401(未授权)

如果一个 POST 有效而另一个无效,那么您的 angularjs $http 请求使用了错误的参数。

我建议您获得一个 http 分析器(如 Fiddler),然后比较 Postman 完成的实际请求与您 angular 应用程序完成的请求。

这是解决您问题的建议;

使用cors模块(不需要);

服务器端

我假设你的 passport 代码工作正常。

var cors= require('cors');

//init first.

app.options(cors({origin'*'}));  //Use your origins.
app.use(cors({origin'*'}));      //Use your origins.

客户端

只需删除 headers 个选项

//...

$http.post('https://staj-io-goldenilkay92-1.c9.io/api/v1/oauth/token', data)
    .success(function (response, status, headers, config) {
        deferred.resolve(response);
    }).error(function () {
        deferred.reject("Failed to login");
    });
//...