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

Passport Always returns 401 when I use app.use

本文关键字:Passport 返回 app use      更新时间:2023-09-26

我一直在尝试使用基于"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/anything时,总是返回401代码状态。

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

解决方案问题是,我没有发送由"Basic"字符串+"username:password"组成的授权标头,该字符串编码在base64中。

在角度http响应中。

    $http({
              url: serverUrl,
              method: 'POST',
              headers: {'authorization': 'Basic ' +  new Buffer(username + ':' + password).toString('base64');},
              data: fields
            })

感谢@Vadim在这篇文章中的回答http://goo.gl/xkpCfN