Passport.js 执行
Passport.js Execution
我一直在网上查看一些 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'
创建了一个资源对象,当我在该对象上调用保存时,它将 运行 我服务器上 '/login'
端点的路由 (app.js)。然后在我的服务器中它将 passport.authenticate('login', ...
这将 运行 护照中间件。
现在我的问题是:
在 passport.use('login'...
策略中,变量 req, username, and password
的 do 值来自该策略的回调。我是否必须明确传递用户在我前端的文本字段中输入的用户名和密码。就像我在 AJS 视图中对这两个文本字段进行双向数据绑定一样。如果是这样,我如何传递这些用户名和密码值?
我的 AJS 控制器中的这两行 User.username = $scope.usernameVar;
和 User.password = $scope.passwordVar;
是否将 usernameVar 和 passwordVar 值附加到我服务器上路由 '/login'
的 req
对象?
如果您的表单包含 post 到您的路径 /login
的操作,并且在您的 username
和 password
之后标记了输入名称,提交按钮将将这些值传递给您的护照代码。
查看 docs 中的 表格 。
我一直在网上查看一些 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'
创建了一个资源对象,当我在该对象上调用保存时,它将 运行 我服务器上 '/login'
端点的路由 (app.js)。然后在我的服务器中它将 passport.authenticate('login', ...
这将 运行 护照中间件。
现在我的问题是:
在 passport.use('login'...
策略中,变量 req, username, and password
的 do 值来自该策略的回调。我是否必须明确传递用户在我前端的文本字段中输入的用户名和密码。就像我在 AJS 视图中对这两个文本字段进行双向数据绑定一样。如果是这样,我如何传递这些用户名和密码值?
我的 AJS 控制器中的这两行 User.username = $scope.usernameVar;
和 User.password = $scope.passwordVar;
是否将 usernameVar 和 passwordVar 值附加到我服务器上路由 '/login'
的 req
对象?
如果您的表单包含 post 到您的路径 /login
的操作,并且在您的 username
和 password
之后标记了输入名称,提交按钮将将这些值传递给您的护照代码。
查看 docs 中的 表格 。