【问题标题】:Implementing OAuth1 in NestJs在 NestJs 中实现 OAuth1
【发布时间】:2019-07-16 06:25:58
【问题描述】:

我正在尝试为 Atlassian 堆栈 (Bamboo) 设置带有 PassportJs 的 NestJs 不幸的是,文档只解释了如何使用本地身份验证。

我阅读了 Nestjs 的文档,PassportJs 应该提供我使用的策略,但我在 NestJS 中收到“OAuth 身份验证需要会话支持”错误。

所以我尝试在我的 auth.module.ts 中配置它。

import { HttpModule, Module } from '@nestjs/common';
import { AuthController } from '../Controller/auth.controller';
import { AppService } from '../../app.service';
import { ConfigModule } from '../../config/config.module';
import { OAuth1 } from '../strategy/o-auth1.service';
import { PassportModule } from '@nestjs/passport';

@Module({
  imports: [HttpModule, ConfigModule, PassportModule.register({ session: true })],
  controllers: [AuthController],
  providers: [AppService, OAuth1],
  exports: [PassportModule.register({ session: true })],
})

export class AuthModule {
}

这将是模块

import { ConfigService } from '../../config/config.service';
import { Injectable, Req, Res } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-atlassian-oauth';
import { ExpressSessionMiddleware } from '@nest-middlewares/express-session';
import { Request, Response } from 'express';

@Injectable()
export class OAuth1 extends PassportStrategy(Strategy, 'oauth1') {
  constructor(private readonly envConfig: ConfigService) {
    super(
      {
        applicationURL: 'http://localhost:8085/',
        consumerKey: consumerkey,
        consumerSecret: consumerSecret,
        callbackURL: envConfig.thisCallbackURL,
      },
      (token, tokenSecret, profile, cb) => {
        User.findOrCreate({ exampleId: profile.id }, (err, user) => {
          return cb(err, user);
        });
      },
    );
  }
}

这是实施的策略

@Get('')
  @UseGuards(AuthGuard('oauth1'))
  async auth(@Req() req: Request, @Res() res: Response): Promise<string> {
    console.log(this);
    try {
      console.log('');
    } catch (e) {
      console.log(e);
    }
    res.send('hallo');
    return 'test';
  }

这是控制器

我尝试过,但我找不到任何解决方案

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    将此添加到您的 main.ts

    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import session = require('express-session');
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.use(session({ secret: 'you secret', saveUninitialized: true, resave: true }));
      await app.listen(3010);
    }
    
    bootstrap();
    
    

    【讨论】:

    • 嗨@kira,我尝试按照您的回答和问题进行操作,但它不起作用,我不知道如何在nestjs 中解决它。请您澄清谁是控制器或处理callbackURL: envConfig.thisCallbackURL的服务?
    • 我不断收到:{"trace":"InternalOAuthError: failed to fetch user profile\n at \\node_modules\\passport-atlassian-oauth\\lib\\passport-atlassian-oauth\\strategy.js:95:33\n,我正在 Jira 上尝试您的解决方案
    • 嗨@Adham Sabry,这是不久前的事了。但是 envConfig 是一项服务,它加载我的环境文件并将密钥、id 等所有内容放入正确的对象中。我无权访问此代码,否则我会分享它。所以我的回调 url 在 envConfig.thisCallbackURL 读取的文件中
    猜你喜欢
    • 2014-01-19
    • 2021-06-13
    • 2020-07-28
    • 2020-03-24
    • 2020-08-10
    • 2019-05-24
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多