如何使用客户端模板的护照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."}); }