- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对具有来自 nestjs 护照模块的 AuthGuard 的路由进行端到端测试,但我真的不知道如何处理它。当我运行测试时,它说:
[ExceptionHandler] Unknown authentication strategy "bearer"
我还没有模拟它,所以我想是因为那个,但我不知道该怎么做。
这是我目前所拥有的:
player.e2e-spec.ts
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { PlayerModule } from '../src/modules/player.module';
import { PlayerService } from '../src/services/player.service';
import { Repository } from 'typeorm';
describe('/player', () => {
let app: INestApplication;
const playerService = { updatePasswordById: (id, password) => undefined };
beforeAll(async () => {
const module = await Test.createTestingModule({
imports: [PlayerModule],
})
.overrideProvider(PlayerService)
.useValue(playerService)
.overrideProvider('PlayerRepository')
.useClass(Repository)
.compile();
app = module.createNestApplication();
await app.init();
});
it('PATCH /password', () => {
return request(app.getHttpServer())
.patch('/player/password')
.expect(200);
});
});
player.module.ts
import { Module } from '@nestjs/common';
import { PlayerService } from 'services/player.service';
import { PlayerController } from 'controllers/player.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Player } from 'entities/player.entity';
import { PassportModule } from '@nestjs/passport';
@Module({
imports: [
TypeOrmModule.forFeature([Player]),
PassportModule.register({ defaultStrategy: 'bearer' }),
],
providers: [PlayerService],
controllers: [PlayerController],
exports: [PlayerService],
})
export class PlayerModule {}
最佳答案
下面是基于使用 TypeORM 和 NestJs 的 passportjs 模块的 auth API 的端到端测试。 auth/authorize API 检查用户是否已登录。auth/login API 验证用户名/密码组合并返回一个 JSON Web token (JWT),如果查找成功。
import { HttpStatus, INestApplication } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import { TypeOrmModule } from '@nestjs/typeorm';
import * as request from 'supertest';
import { UserAuthInfo } from '../src/user/user.auth.info';
import { UserModule } from '../src/user/user.module';
import { AuthModule } from './../src/auth/auth.module';
import { JWT } from './../src/auth/jwt.type';
import { User } from '../src/entity/user';
describe('AuthController (e2e)', () => {
let app: INestApplication;
let authToken: JWT;
beforeAll(async () => {
const moduleFixture = await Test.createTestingModule({
imports: [TypeOrmModule.forRoot(), AuthModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
it('should detect that we are not logged in', () => {
return request(app.getHttpServer())
.get('/auth/authorized')
.expect(HttpStatus.UNAUTHORIZED);
});
it('disallow invalid credentials', async () => {
const authInfo: UserAuthInfo = {username: 'auser', password: 'badpass'};
const response = await request(app.getHttpServer())
.post('/auth/login')
.send(authInfo);
expect(response.status).toBe(HttpStatus.UNAUTHORIZED);
});
it('return an authorization token for valid credentials', async () => {
const authInfo: UserAuthInfo = {username: 'auser', password: 'goodpass'};
const response = await request(app.getHttpServer())
.post('/auth/login')
.send(authInfo);
expect(response.status).toBe(HttpStatus.OK);
expect(response.body.user.username).toBe('auser');
expect(response.body.user.firstName).toBe('Adam');
expect(response.body.user.lastName).toBe('User');
authToken = response.body.token;
});
it('should show that we are logged in', () => {
return request(app.getHttpServer())
.get('/auth/authorized')
.set('Authorization', `Bearer ${authToken}`)
.expect(HttpStatus.OK);
});
});
请注意,因为这是一个端到端测试,所以它不使用模拟(至少我的端到端测试不使用 :))。希望这对您有所帮助。
关于nestjs - 在 NestJS 中测试护照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53267536/
假设有一个应用程序有 10 个动态页面(可能是表单),其中 8 个页面是受限的(需要用户登录应用程序),另外 2 个页面可供匿名用户使用。 我的前端应用程序是在 Angular 2 中开发的,后端 A
我正在将 Passport-facebook 与 ExpressJS 和 PassportJS 一起使用 我想知道如何将显示参数设置为触摸,以便当我们的 Android 设备获取登录并允许应用程序所需
我有一个nodeJS应用程序(express),它有一个facebook登录。我正在使用 Passport-facebook 身份验证,如此处所述 passport-facebook 。几周前我的登录
我正在尝试了解在使用 Passport-facebook 和 Node/express 时 Facebook 身份验证如何工作。 我对回调URL 和下面的函数感到困惑。 有人可以向我解释一下设置回调U
我有一个问题 - 我正在为我的 api 使用 Laravel Passport。我需要编写测试。每当我在测试中使用 WithoutMiddleware 特性时,它都会禁用我使用的 Implicit r
我对 Telegram Bot API 有点陌生,在机器人中我想通过 Telegram Passport 验证用户的年龄 我正在尝试重新创建他们的 Javascript SDK .按钮出现并打开 Te
如 laravel-passport 中所述登录 Controller 由 php artisan make:auth 制成在我们的路由器中 web.php会有 Auth::routes();我们 c
Laravel 上有 API,它使用 Laravel Passport 进行身份验证。一切都在默认设置下运行良好。然后我们决定将访问 token 的生命周期相应地更改为 1 天和 1 个月。它导致刷新
目前我有一个使用 Laravel Passport 的 Laravel 安装(它使用 league/oauth2-server 作为服务器实现)。我想在授予 oauth2 token 时返回用户 ID
我试图实现护照 Facebook 我在 server.js 中的代码如下所示当用户通过 facebook 点击登录时使用的路由 router.get('/auth/facebook',
我正在使用 laravel v5.8、VueJS 和 passport v7.4 进行身份验证。下面是我的登录函数: public function login(Request $request)
我尝试在 heroku 上安装我的应用程序。这个应用程序是一个 php-laravel 应用程序,带有用于身份验证的“护照”。在我的本地机器(mac os)上一切正常。 当我尝试与 postman 进
我参加 NodeJS 类(class)和观看教程有一段时间了,并决定在应用中充分利用它们。 对于这个项目,我需要用户注册和登录,以便将他们的事件存储在数据库中。这个过程我是用Passport做的,这部
我正在尝试使用 Passport-local 来限制对网站的访问。 为此,我使用login_app来运行passport-local,但这本身就是从主app.js调用的路由。当尝试在第二层(护照文件/
在我使用护照注册用户并在数据库中查看用户后。我尝试登录,但收到消息“未经授权”。这是我的登录方法: public function login(){ if(Auth::attempt(['em
我看了很多关于 Laravel passport 的文章和视频,但仍然无法理解一些东西。 我有一个适用于 Laravel 5.5 + vueJs 的应用程序。所有对后端的请求都是通过 axios 发送
所以我想对我的 API 端点进行单元测试。我正在使用 Laravel 5.8 并且 api 身份验证是使用 Passport 完成的我有以下测试: public function guest_can_
我想知道当从 API 调用中注销用户时,在 Laravel 护照的oauth_access_tokens 表中管理 token 的最佳方法是什么? 目前我只为token设置了8小时的有效期,并把所有的
CreateFreshApiToken,一旦添加到 Kernel.php 中的“web”中间件组,应该附加 laravel_token cookie 以响应通过 web 中间件发出的每个请求,不是吗?
我正在尝试安装 Laravel Passport在 Laravel 5.7.18 上使用 PHP 7.2.13。 我的应用程序使用 JavaScript(Axios 和 Vue)在自身内部使用 API
我是一名优秀的程序员,十分优秀!