娱乐的护照:通过Passport.js和Typescript对用户进行认证的快乐指南
介绍
欢迎进入有关如何在打字稿中使用Passport.js库在明确后端身份验证用户的教程!在本教程中,我们将介绍设置Passport.js并将其配置为与Typescript一起配置的基础知识,以及一些最佳实践,用于对您的Express Backend中的身份验证用户。
本教程假设您对Express,Typescript和JavaScript有基本的了解。如果您是这些技术的新手,请首先在继续之前熟悉它们。
步骤1:安装依赖项
第一步是安装必要的依赖项。您需要在项目中安装Express和Pastport。您可以通过运行以下命令使用NPM安装这些软件包:
npm install express passport
步骤2:设置打字稿
接下来,您需要在项目中设置打字稿。如果您启动了一个新项目,则可以使用tsc
命令来初始化新的打字稿项目。如果您正在从事现有项目,则需要配置您的项目以使用Typescript。
步骤3:制定护照策略
现在您已经设置了护照和打字稿,是时候创建护照策略了。护照策略用于对用户进行身份验证。它通常是通过扩展PassportStrategy
类而创建的。
对于本教程,我们将使用LocalStrategy,允许用户使用用户名和密码进行身份验证。要创建一个本地,您需要从护照模块和护照本地模块的Strategy
类导入PassportStrategy
类。然后扩展PassportStrategy
类并实现authenticate
方法。
这是当地实施的一个示例:
import { PassportStrategy } from 'passport';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { AuthService } from './auth.service';
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'secretKey',
});
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.username };
}
}
步骤4:配置护照
创建了护照策略后,您需要配置护照以使用它。这通常是在Express应用程序的主要入口处完成(例如app.js
或server.ts
)。
首先,进口护照和您的护照策略。然后使用use
方法配置护照以使用您的策略。
这是如何配置护照以使用本地策略的示例:
import passport from 'passport';
import { JwtStrategy } from './jwt.strategy';
passport.use(new JwtStrategy());
步骤5:保护路线
现在您已经配置了护照,可以使用它来保护Express应用中的路由。为此,您需要使用Passport提供的authenticate
方法。此方法以您要使用的策略的名称(在这种情况下,“ JWT”)作为其第一个参数,而选项对象是其第二个参数。
这是如何使用当地策略保护路线的一个示例:
import express from 'express';
import passport from 'passport';
const router = express.Router();
router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res) => {
res.json({ user: req.user });
});
在此示例中,/profile
路线受JWT策略的保护。只有使用此策略才能成功验证的用户才能访问此路线。
步骤6:登录和外出
现在,您已经通过护照保护了路线,您需要在应用程序中添加登录功能和注销功能。
为了登录,您通常会创建一个接受用户名和密码的登录路由。然后使用Passport提供的authenticate
方法来验证用户。
用于登记,您通常会创建一个注销路由来调用Passport的logout
方法。
这是如何创建登录路线的示例:
router.post('/login', (req, res, next) => {
passport.authenticate('jwt', (err, user, info) => {
if (err || !user) {
return res.status(400).json({
message: 'Something is not right',
user : user
});
}
req.login(user, { session: false }, (err) => {
if (err) {
res.send(err);
}
// generate a signed json web token with the contents of user object and return it in the response
const token = jwt.sign(user, 'your_jwt_secret');
return res.json({ user, token });
});
})(req, res);
});
这是如何创建注销路由的示例:
router.get('/logout', (req, res) => {
req.logout();
res.redirect('/');
});
结论
就是这样!现在,您已经成功设置了Passport.js,可以使用Typescript在快递后端中对用户进行身份验证。请记住,这是一个基本示例,并且在构建应用程序时始终考虑安全性和扩展因素。
希望您发现本教程有帮助!如果您有任何疑问或遇到任何问题,请随时寻求帮助。