在当前的 Web 应用程序中,很多应用程序需要实现身份验证和授权。而 Express.js 是一个非常优秀的 Web 应用程序框架,它可以使身份验证和授权过程变得容易和有逻辑。
身份验证
身份验证在 Web 应用程序中非常重要,它可以确保只有授权的用户才能访问应用程序的资源。Express.js 身份验证的实现过程如下:
步骤一:安装依赖
安装 express-session
和 passport
。
npm install express-session passport
步骤二:配置 passport
在用 express-session
中间件之前,应该先配置 passport。我们可以在应用程序的入口处添加以下代码:
const passport = require('passport'); app.use(passport.initialize()); app.use(passport.session());
步骤三:创建策略
接下来,我们需要创建策略以进行身份验证。我们可以创建一个 LocalStrategy
策略,它会在本地进行用户验证。
我们可以在应用程序的入口处添加以下代码:
const LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy((username, password, done) => { // 在此处进行用户验证 }));
步骤四:处理身份验证
接下来,我们需要处理身份验证。通过在成功处理身份验证后调用 done()
,我们可以将用户信息存储在 session 中。
passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser((id, done) => { User.findOne({ id: id }, (err, user) => { done(err, user); }); });
步骤五:处理登录请求
最后我们需要处理用户的登录请求。我们需要在此处调用 passport.authenticate()
方法来验证用户的身份。我们可以通过以下代码实现:
app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }));
授权
通过身份验证,我们可以确保访问应用程序的用户是已验证的用户,接下来我们需要对用户进行授权,确保他们有访问所需资源的权限。在 Express.js 中实现授权的步骤如下:
步骤一:安装依赖
我们可以安装 express-jwt
和 jsonwebtoken
。
npm install express-jwt jsonwebtoken
步骤二:创建路由
我们可以在路由中创建 /todos
API 来模拟需要进行授权的 API。
const jwt = require('jsonwebtoken'); const jswtSecret = require('./secret'); const expressJwt = require('express-jwt'); const router = express.Router(); router.use(expressJwt({ secret: jswtSecret })); router.get('/todos', (req, res) => { // 实现访问验证 });
步骤三:处理授权失败请求
如果用户没有授权访问资源,我们应该在请求过程中提供非常有用的错误信息。
app.use((err, req, res, next) => { if (err.name === 'UnauthorizedError') { res.status(401).send('你没有访问权限'); } });
步骤四:创建 Token
在授权后, 我们可能需要创建 Token。我们可以通过以下代码创建 Token:
const jwt = require('jsonwebtoken'); const token = jwt.sign({ id: userId }, jswtSecret);
Token 中包含了用户信息以及过期时间。
步骤五:处理 Token
最后我们需要处理 Token,进行验证并解码。我们可以使用以下代码:
const jwt = require('jsonwebtoken'); const token = req.headers.authorization.split(' ')[1]; const decoded = jwt.verify(token, jswtSecret);
结论
在这篇文章中,我们了解了如何在 Express.js 中实现身份验证和授权。我们需要仔细处理每一个步骤,确保用户的信息和资源得到安全的保护。通过这篇文章我们可以更好的了解从最初的几个简单的步骤到实际应用身份验证和授权的完整过程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67532ddd8bd460d3ad9b9e2a