This package has been deprecated

Author message:

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

@deskbtm/midway-passport
TypeScript icon, indicating that this package has built-in type declarations

0.0.1-alpha.15 • Public • Published

midway-passport 使用文档

Passport 的目的是请求进行身份验证,其中它通过一组可扩展称为插件的策略midway-passport 对 Passport 进行了封装,目前支持ExpressKoa ,理论上支持Egg 未验证。此外请使用Typescript开发。

准备

  1. 安装 npm i @deskbtm/midway-passport
Express
npm i passport
Koa, Egg
npm i koa-passport
  1. 开启相对应框架的 bodyparser

开始

首先请对Passport进行简单了解

以本地, Jwt 为例

首先我们用ExpressPassportStrategyAdapter 创建一个 Strategy,其次再用@BootStrategy来启动此策路

local.strategy.ts

import { BootStrategy } from '@deskbtm/midway-passport';
// koa 为 @deskbtm/midway-passport/koa KoaPassportStrategyAdapter
import { ExpressPassportStrategyAdapter } from '@deskbtm/midway-passport/express';
import { Strategy } from 'passport-local';
import { Repository } from 'typeorm';
import { ILogger } from '@midwayjs/logger';
import { InjectEntityModel } from '@midwayjs/orm';
import { Logger } from '@midwayjs/decorator';
import { UserEntity } from './user';

@BootStrategy({
  async useParams() {
    return {
      passwordField: 'pwd',
    };
  },
})
// ExpressPassportStrategyAdapter 支持自定义name
export class LocalStrategy extends ExpressPassportStrategyAdapter(Strategy, 'local') {
  @InjectEntityModel(UserEntity)
  photoModel: Repository<UserEntity>;

  @Logger('dash')
  logger: ILogger;

  // 通过 verify 钩子来获取有效负载  并且此函数必须有返回参数
  // 详情见对应的Strategy
  async verify(username, password) {
    const user = await this.photoModel.findOne({ username });

    this.logger.info('user from db', user);

    if (!user) {
      throw new Error('not found user ' + username);
    }

    return {
      username,
      password,
    };
  }
}

jwt.strategy.ts

import { BootStrategy } from '@deskbtm/midway-passport';
import { ExpressPassportStrategyAdapter } from '@deskbtm/midway-passport/express';
import { Strategy, ExtractJwt } from 'passport-jwt';

@BootStrategy({
  async useParams({ configuration }) {
    return {
      // 需要在config中配置secret
      secretOrKey: configuration.jwt.secret,
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
    };
  },
})
export class JwtStrategy extends ExpressPassportStrategyAdapter(Strategy, 'jwt') {
  async verify(payload) {
    return payload;
  }
}

local.control.ts

import { PassportControl } from '@deskbtm/midway-passport';

export class LocalPassportControl extends PassportControl {
  name = 'local';

  public onError(err): void {
    console.log(err);
  }
  // 具体请看 passport.authenticate
  public auth(_err, data): void {
    console.log('local authenticate data', data);
  }
}

jwt.control.ts

import { PassportControl } from '@deskbtm/midway-passport';

export class LocalPassportControl extends PassportControl {
  name = 'jwt';

  public onError(err): void {
    console.log(err);
  }

  public auth(_err, data): void {
    console.log('jwt authenticate data', data);
  }
}

test.controller.ts

import { Frontier } from '@deskbtm/midway-passport/express';
import { ALL, Provide, Logger, Get, Inject } from '@midwayjs/decorator';
import { Body, Controller, Post } from '@midwayjs/decorator';
import { LocalPassportControl } from './local.control';
import { JwtPassportControl } from './jwt.control';
import { ILogger } from '@midwayjs/logger';
import { Jwt } from '@deskbtm/midway-jwt';

@Provide()
@Controller('/test')
export class TestPackagesController {
  @Logger('dash')
  logger: ILogger;

  @Inject()
  jwt: Jwt;

  @Post('/local-passport')
  @Frontier(LocalPassportControl)
  async localPassport(@Body(ALL) body) {
    console.log(body);
    return body;
  }

  @Post('/jwt-passport')
  @Frontier(JwtPassportControl)
  async jwtPassport(@Body(ALL) body) {
    console.log(body);
    return body;
  }

  @Post('/gen-jwt')
  async genJwt() {
    return {
      t: await this.jwt.sign({ msg: 'Hello Midway' }),
    };
  }
}

@Provide()
@Controller('/test1')
@Frontier(JwtPassportControl)
export class Test1PackagesController {}

在 StrategyAdapter 中支持 1. 使用 BootStrategy 中的 useParams。2. 通过 StrategyAdapter 的第三个参数,两种方式传递 options。

相关

@deskbtm/midway-jwt

Package Sidebar

Install

npm i @deskbtm/midway-passport

Weekly Downloads

1

Version

0.0.1-alpha.15

License

MIT

Unpacked Size

28.3 kB

Total Files

24

Last publish

Collaborators

  • deskbtm