娱乐的护照:通过Passport.js和Typescript对用户进行认证的快乐指南
#javascript #教程 #身份验证 #authentication

娱乐的护照:通过Passport.js和Typescript对用户进行认证的快乐指南

介绍

Passport to Fun: A Joyful Guide to Authenticating Users with Passport.js and 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.jsserver.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在快递后端中对用户进行身份验证。请记住,这是一个基本示例,并且在构建应用程序时始终考虑安全性和扩展因素。

希望您发现本教程有帮助!如果您有任何疑问或遇到任何问题,请随时寻求帮助。