【发布时间】:2014-07-13 02:24:37
【问题描述】:
我使用 Passport.js 和 MongoStore 进行身份验证,我使用 express 作为 Web 框架。用户登录后,他可以访问特定路径的内容。
我想根据已通过身份验证的用户提供不同的内容。假设在 members 的 Mongo 集合中,每个人都有一个 category 或 privileges 属性,然后我将确定要显示给他的内容。 p>
我将使用 AngularJS 来绑定和呈现 HTML。
这是我管理的路线:
app.get('/',function (request, response) {
if(request.isAuthenticated())
response.redirect('/admin')
else
response.sendfile("public/index.html")
})
app.get('/admin',function (request, response) {
if(request.isAuthenticated())
response.sendfile("views/admin.html")
else
response.redirect('/')
})
app.post('/login',
passport.authenticate('local', {
successRedirect: '/admin',
failureRedirect: '/'
})
)
app.get('/logout', function (request, response){
request.session.destroy(function (err) {
response.redirect('/'); //Inside a callback… bulletproof!
})
})
app.get('*',function (request, response) {
response.redirect('/')
})
这是我的
Passport.js代码:
mongoose.connect('mongodb://localhost/integraDB')
var Schema = mongoose.Schema
var userCredential = new Schema({
username: String,
password: String
}, {
collection: 'members'
})
var userCredentials = mongoose.model('members', userCredential)
app.use(session({
clear_interval: 900,
cookie: { maxAge: 2 * 60 * 60 * 1000 },
store: new MongoStore({
db : mongoose.connection.db
})
}));
passport.serializeUser(function(user, done) {
done(null, user);
})
passport.deserializeUser(function(user, done) {
done(null, user);
})
passport.use(new LocalStrategy(function(username, password, done) {
process.nextTick(function() {
userCredentials.findOne({
'username': username,
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false);
}
if (user.password != password) {
return done(null, false);
}
return done(null, user);
});
});
}))
我怎样才能做到这一点?
【问题讨论】:
标签: javascript angularjs node.js mongodb passport.js