2

我正在使用passport js來處理一些身份驗證。但是,我也使用angular $route service來處理我在客戶端的模板。因此,我不確定如何繼續使用護照,因爲doc頁面上的示例假設服務器端模板。例如,如何使用護照js與客戶端模板?

app.post('/login', 
    passport.authenticate('local', { 
     successRedirect: '/', 
     failureRedirect: '/login', 
     failureFlash: true 
    }) 
); 

所以在此基礎上,它看起來像「/」和「/登錄」是指以服務模板,不只是一個RESTful查詢或某事的反應。我做事的方式,我的模板發生在客戶端。在我的角度文件中設置好所有

$routeProvider 
    .when('/', { 
     templateUrl: 'templates/login.html', 
     controller: 'MainCtrl' 
    }) 
    .when('/home', { 
     templateUrl: 'templates/home.html', 
     controller: 'MainCtrl' 
    }); 

好像我試圖混合和匹配,並沒有真正理解做事情的兩種方法。

所以我知道我可能已經窘況迄今爲止措辭這一點,但我想要做的就是這樣的事情

HTML(login.html的)

<h3> Login </h3> 
<form action= "login" method="post"> 
    Username:<br> 
    <input type="text" name="username" value=""> 
    <br> 
    Password:<br> 
    <input type="password" name="password" value=""> 
    <br><br> 
    <input type="submit" value="Submit"> 
</form> 

節點後端

我意識到我不認證任何東西,但這很多還沒有爲我工作

passport.use(new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

app.post('/login', 
    passport.authenticate('local', { 
     successRedirect: '/home', 
     failureRedirect: '/', 
     failureFlash: true 
    }) 
); 

所以我想使用護照進行身份驗證,但使用客戶端模板/路由來保持單頁應用程序的感覺。

有人可以請指出我在正確的方向嗎?或者告訴我,我所做的是完全錯誤的?

編輯:我跟我的代碼得到的錯誤是

TypeError: undefined is not a function 

這可能是不夠的,必須到任何你有用,但如果需要,我可以去更深入。具體的錯誤信息並不是我想要問的精神。

+0

瀏覽器給你的錯誤或者它發生在服務器端?該錯誤可能由於缺少參數而發生,您應該查看堆棧跟蹤並確切指出發生的位置 – rocketspacer

回答

-1

對於JS,你需要包含這段代碼在應用程序中使用的護照。JS

app.use(passport.initialize()); 
app.use(passport.session()); 

您的代碼

passport.use(new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

沒有地方你passport.authenticate

使用

passport.use('login', new LocalStrategy(
    function (username, password, done) { 
     console.log(username);  // this does not fire 
     return done(null, null); 
    } 
)); 

叫一個名字即使是序列化和反序列化,你應該實現護照的序列化和反序列化方法

passport.serializeUser(function (user, done) { 
    done(null, user); 
}); 
passport.deserializeUser(function (id, done) { 
    done(null, id); 
}); 

`

在LocalStrategy返回

if (valid) { 
    return done(null, username); 
} else { 
    return done(null, false, {"message": "User not found."}); 
} 
1

您可以用什麼護照調用自定義回調

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.status(401).end('wrong credentials'); } 

    //If you use session, skip if you dont 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.status(200).end('user authenticated' + user.username); //That, or hand them a session id or a JWT Token 
    }); 

    // If you don't use session just response directly to client 
    res.status(200).end(jwt.createToken(user)); 
    })(req, res, next); 
}); 

http://passportjs.org/docs/authenticate#custom-callback
所以,沒有服務器端重定向在這裏,所有的路由邏輯可以做到前端