Passport当我使用app.use时总是返回401

时间:2016-01-06 13:03:39

标签: javascript node.js express http-status-code-401 passport.js

我一直在尝试使用基于`passport-http'基本策略的自定义策略来验证我的路线。这是我的策略的代码。

passport_auth.js

var BasicStrategy = require('passport-http').BasicStrategy;

module.exports.userBasic = (function(name){
  var userAuthBasic = new BasicStrategy(
    function(username, password, done) {

      //My strategy
    }
  );
  userAuthBasic.name = name;
  return userAuthBasic;
})('userBasic');

使用IIFE我注册了我的策略名称。然后在文件app.js中调用如下:

app.js

var express = require('express');
var bodyParser = require('body-parser');
var passport = require('passport');
var userRouter = require(__dirname+'/http/routers/user_router.js');
const cors = require('cors')();
var passportAuth = require(__dirname + '/http/passport_auth'); //My file with my strategy

//Adds to passport my strategy
passport.use(passportAuth.userBasic);

var app = express();
app.use(cors);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(passport.initialize());


app.use('/user', passport.authenticate('userBasic', { session: false }), userRouter);

userRouter包含多条路线。当我尝试POST到/ user /时总是返回401代码状态。

这个配置好吗?在其他模块中,相同的代码工作正常,但在这种情况下,我花了很多时间试图解决这个问题。

1 个答案:

答案 0 :(得分:1)

<强>解决方案 问题是我没有发送由以下内容形成的授权标题:'基本'字符串+'用户名:密码'以base 64编码。

在角度http响应中。

$scope.change = function(){
        $http.get("http://localhost:3000/pupdb/pupdb/?count&pagesize=10&filter={'uniprot_AC':{'$regex':'(?i)"+$scope.UniP+".*'},'gene_name':{'$regex':'(?i)"+$scope.GeneN+".*'},'species':{'$regex':'(?i)"+$scope.Org+".*'},'description':{'$regex':'(?i)"+$scope.Des+".*'},'site':{'$regex':'(?i)"+$scope.Site+".*'}}")

@Vadim在这篇文章中回答patch