2017-06-04 78 views
1

我使用angularJS +護照來執行用戶驗證,因此,我在下面設置了它們。 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:本地策略需要驗證回調。我不知道我錯在哪裏,是新手。請幫忙。

回答

2

你得到的錯誤是由這個原因引起:

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

你調用Strategy類不帶任何參數,所以這導致了錯誤。要存儲類本身的引用,就像這樣:

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

而且,因爲你設置passReqToCallback : true,驗證回調將採取參數,而不是三個。它應該看起來像這樣:

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

你是完全正確的。對不起,這個愚蠢的錯誤。我糾正它,現在我沒有得到類型錯誤,但我得到400 - 錯誤的要求。你能告訴我爲什麼嗎? – Gayathri

+0

@Gayathri我不確定您發佈數據的方式是否正確(可能不會調用'JSON.stringify()',但我對Angular不太熟悉,所以不太確定)。 – robertklep

+0

我沒有給HTML添加名稱屬性,這就是爲什麼值沒有傳遞給策略的原因。 – Gayathri