我和Koa,Passport和Monk有点麻烦。
我希望使用Passport进行简单的本地身份验证。我遵循了一些教程,并得到了以下结论:(auth.js)
const
passport = require('koa-passport'),
LocalStrategy = require('passport-local').Strategy,
monk = require('monk'),
wrap = require('co-monk'),
db = monk('localhost/try'),
users = wrap(db.get('users'));
var user = {
id: 1,
username: 'test'
};
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, user);
});
passport.use(new LocalStrategy(
function(username, password, done) {
if (username === 'test' && password === 'test') {
return done(null, user);
} else {
return done(null, false);
}
}
));
module.exports = passport;现在可以正常工作了,但是我如何在这里使用我的测试数据库,而不是if (用户名测试‘MongoDb’&密码测试‘===’)?
我试着添加这个函数:
function *getUser(name) {
var useri = yield users.find({name:name});
return useri;
};然后像这样使用它:
passport.use(new LocalStrategy(
function(username, password, done) {
var useri = getUser(username);
console.log(useri);
if (username === 'test' && password === 'test') {
return done(null, user);
} else {
return done(null, false);
}
}
));但最终只能在我的控制台中得到{}。
那么我该怎么做呢?在Express中这一切都很简单,但是有了这个Koa的东西,我真的很难理解它是如何工作的……
发布于 2014-10-01 14:23:56
您应该使用 you 关键字调用生成器函数。但是您可以仅在生成器函数中使用yield。因此,您可以将函数包装在co()中,如下所示:
passport.use("login",new LocalStrategy(function(username, password, done) {
// retrieve user ...
co(function *() {
try {
var user=yield getUser(username);
console.log(user);
return user;
} catch (ex) {
return null;
}
})(done);
}));发布于 2015-04-03 16:45:39
你可以看到这个演示:https://github.com/dozoisch/koa-react-full-example/blob/master/lib/authenticator.js
@Mohammad Rasti的方法在我的项目中不起作用(可能是因为版本不同)。下面的代码对我有效。
passport.use(new LocalStrategy(function(username, password, done) {
co(function*() {
try {
var user = yield getUser(username);
if (username === user.username && password === user.password) {
return user;
} else {
return null;
}
} catch(e) {
return null;
}
}).then(function(user) {
done(null, user);
});
}));发布于 2015-12-22 01:40:07
这就是我使用它的方式:
var LocalStrategy = require('passport-local').Strategy
passport.use(new LocalStrategy(function(username, password, done) {
co(function *() {
try {
return yield getUser(username, password);
} catch (ex) {
console.log('error: ', ex);
return null;
}
}).then(function(user) {
console.log('found: ', user);
done(null, user);
});
}))https://stackoverflow.com/questions/25627127
复制相似问题