我在网上看过一些passport.js教程,但还没有清楚地理解正在发生的事情。有人能帮我澄清下面的疑问吗?请先读下面的段落。
因此,假设我正确设置了所有内容,这就是登录策略:
passport.use('login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done) {
// check in mongo if a user with username exists or not
User.findOne({ 'username' : username },
function(err, user) {
// In case of any error, return using the done method
if (err)
return done(err);
// Username does not exist, log error & redirect back
if (!user){
console.log('User Not Found with username '+username);
return done(null, false,
req.flash('message', 'User Not found.'));
}
// User exists but wrong password, log the error
if (!isValidPassword(user, password)){
console.log('Invalid Password');
return done(null, false,
req.flash('message', 'Invalid Password'));
}
// User and password both match, return user from
// done method which will be treated like success
return done(null, user);
}
);
}));现在,在我的app.js (服务器)中,我将此作为我的路由之一:
/* Handle Login POST */
router.post('/login', passport.authenticate('login', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash : true
}));现在在我的AJS文件中:
app.controller('loginController', function($scope) {
var user = $resource('/login');
$scope.createUser = function() {
var User = new user();
User.username = $scope.usernameVar;
User.password = $scope.passwordVar;
User.save();
}
});请先读这个(而不是先看代码):
因此,当用户单击登录页面上的登录按钮时,上面的createUser函数就会运行(在我的AJS文件中)。然后,我为端点'/login'创建一个资源对象,当我调用该资源对象时,它将在我的服务器(app.js)上运行该'/login'端点的路由。然后在我的服务器上,它将运行passport.authenticate('login', ...,它将运行护照中间件。
现在我的问题是:
在passport.use('login'...策略中,变量的do值来自于对该策略的回调。我是否必须显式传递用户名和密码,用户输入的文本框在我的前端。就像我在AJS视图中为这两个textfields提供了双向数据绑定一样。如果是这样,我如何传递这些用户名和密码值?
在我的AJS控制器User.username = $scope.usernameVar;和User.password = $scope.passwordVar;中,是否将usernameVar和passwordVar值附加到路由'/login'服务器上的req对象?
发布于 2016-04-15 23:00:17
如果您有一个表单,可以将操作发送到path /login,并且输入名称标记在username和password之后,则submit按钮将把值传递给护照代码。
查看Form中的文档。
https://stackoverflow.com/questions/36658072
复制相似问题