推荐答案
// www.javascriptcn.com code example
const Koa = require('koa');
const passport = require('koa-passport');
const Router = require('koa-router');
const session = require('koa-session');
const app = new Koa();
const router = new Router();
// 配置 session
app.keys = ['your-session-secret'];
app.use(session({}, app));
// 初始化 passport
app.use(passport.initialize());
app.use(passport.session());
// 配置 passport 策略
passport.use(/* 你的策略配置 */);
// 序列化和反序列化用户
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
// 定义路由
router.get('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
}));
router.get('/logout', (ctx) => {
ctx.logout();
ctx.redirect('/');
});
router.get('/', (ctx) => {
if (ctx.isAuthenticated()) {
ctx.body = 'Hello, ' + ctx.state.user.username;
} else {
ctx.redirect('/login');
}
});
// 使用路由
app.use(router.routes());
app.use(router.allowedMethods());
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});本题详细解读
1. 安装依赖
首先,你需要安装 koa-passport 和其他相关依赖:
npm install koa koa-passport koa-router koa-session
2. 配置 Session
koa-passport 依赖于 session 来存储用户信息。你需要配置 koa-session 来启用 session 支持。
app.keys = ['your-session-secret'];
app.use(session({}, app));3. 初始化 Passport
在 Koa 应用中初始化 koa-passport,并启用 session 支持。
app.use(passport.initialize()); app.use(passport.session());
4. 配置 Passport 策略
你需要配置 Passport 的策略,例如 local 策略用于用户名和密码验证。
passport.use(/* 你的策略配置 */);
5. 序列化和反序列化用户
Passport 需要知道如何序列化和反序列化用户对象。通常,序列化用户时存储用户的唯一标识符(如 id),反序列化时根据标识符查找用户。
// www.javascriptcn.com code example
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});6. 定义路由
定义路由来处理登录、注销和主页请求。使用 passport.authenticate 中间件来处理登录请求。
// www.javascriptcn.com code example
router.get('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
}));
router.get('/logout', (ctx) => {
ctx.logout();
ctx.redirect('/');
});
router.get('/', (ctx) => {
if (ctx.isAuthenticated()) {
ctx.body = 'Hello, ' + ctx.state.user.username;
} else {
ctx.redirect('/login');
}
});7. 启动服务器
最后,启动 Koa 服务器并监听端口。
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});通过以上步骤,你可以使用 koa-passport 在 Koa 应用中实现身份验证功能。