如何使用客户端模板的护照js?

我正在使用护照js来处理一些身份validation。 不过,我也使用angular度$路线服务来处理我的模板在客户端。 因此,我不确定如何继续使用护照,因为doc页面上的示例假设服务器端模板。 例如,

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

所以基于此,“/”和“/ login”似乎是为模板提供服务,而不仅仅是对REST式查询的响应。 我正在做的事情,我的模板发生在客户端。 在我的angular度文件,设置一切

 $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> 

节点后端

我意识到我不authentication任何东西,但是这些还没有为我工作

 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 }) ); 

所以我想使用护照进行身份validation,但是使用客户端模板/路由来保持单页应用程序的感觉。

有人能指点我的方向吗? 或者告诉我,我在做什么是完全错误的?

编辑:我用我的代码得到的错误是

 TypeError: undefined is not a function 

这可能不足以对你们任何人有用,但是如果需要的话我可以深入一些。 具体的错误信息并不是我想要问的精神。

你可以使用什么Passport调用自定义callback

 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
所以,这里没有服务器端的redirect,所有的路由逻辑都可以在前端完成

为了使用护照js,你需要在app.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."}); }