Passport本地策略未调用

时间:2017-06-04 12:36:06

标签: javascript passport.js mean-stack passport-local

我使用angularJS + passport来执行用户身份验证,因此,我在下面设置了这些。 HTML:

<div ng-controller="logincontroller">
<form>
Email:<input type="text" ng-model="user.email"/>
Password:<input type="password" ng-model="user.password"/>
<div ng-click=loginUser()>Submit</div>
</form>
</div>

在客户端javascript:

  app.controller('logincontroller',function($scope,$http){
    $scope.loginUser=function(){
    $http.post('/loginUser',JSON.stringify($scope.user));
   }
   })

ON app.js

var bodyParser = require('body-parser');
var cookieParser=require('cookie-parser');
var passport=require('passport');
var LocalStrategy=require('passport-local').Strategy();
var session=require('express-session');
app.use(express.session({secret:"flibbertygibbit"}));
app.use(cookieParser());
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.json());
passport.use(new LocalStrategy(
    {usernameField: 'user.email',
    passwordField: 'user.password',
    passReqToCallback: true
  },
    function(username,password,done){
      console.log("am here"+username+" "+password);

}
))


app.post('/loginUser',passport.authenticate('local'));

我面临的问题是本地策略根本没有被调用,所有我得到Typerror:本地策略需要验证回调。我不确定我哪里出错了,不管它是新手。请帮忙。

1 个答案:

答案 0 :(得分:2)

您获得的错误是由此引起的:

var LocalStrategy=require('passport-local').Strategy();
                                                    ^^

您在没有任何参数的情况下调用Strategy类,因此会导致错误。您希望存储对类本身的引用,如下所示:

var LocalStrategy=require('passport-local').Strategy;

此外,由于您正在设置passReqToCallback : true,因此验证回调将采用四个参数,而不是三个。它应该是这样的:

function(req, username, password, done) { ... }