我正在尝试使用 accessToken 和 refreshToken 实现 JWT 授权。访问令牌和刷新令牌都需要在仅限HTTP的cookie中设置。
我尝试了这段代码,但它没有设置cookie。我在这里使用NestJS框架。
import { Controller, Request, Post, Body, Response } from '@nestjs/common';
@Controller()
export class UserController {
constructor() {}
@Post('users/login')
async login(
@Request() req,
@Body() credentials: { username: string; password: string },
@Response() res,
) {
try {
// Login with username and password
const accessToken = 'something';
const refreshToken = 'something';
const user = { username: credentials.username };
res.cookie('accessToken', accessToken, {
expires: new Date(new Date().getTime() + 30 * 1000),
sameSite: 'strict',
httpOnly: true,
});
return res.send(user);
} catch (error) {
throw error;
}
}
}
res.send()方法运行良好,我正在获取数据作为响应。如何在此处设置cookie?
这是我的主要内容。ts文件:-
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { AuthenticatedSocketIoAdapter } from './chat/authchat.adapter';
import * as cookieParser from 'cookie-parser';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors();
app.use(cookieParser());
app.useWebSocketAdapter(new AuthenticatedSocketIoAdapter(app));
await app.listen(3000);
Logger.log('User microservice running');
}
bootstrap();
为了获得我正在使用的cookie:-
request.cookies
我遇到了和你几乎一样的问题。Axios无法保存cookies。设置SameSite所需的Chrome:“none”,secure: true。你仍然没有工作。它确实使用fetch方法保存了cookie,但是只在运行Chromium的浏览器中...所以mozilla没有收到。我的axios是:
const response = await axios.post(url+'/login', loginState, {withCredentials: true});
后端Nestjs:Main.ts:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.setGlobalPrefix('v1/api');
app.use(cookieParser());
app.useGlobalPipes(new ValidationPipe());
app.enableCors({
credentials: true,
origin: process.env.FRONTEND_URL,
})
await app.listen(3000);
}
我的AuthService登录功能(请记住Res中的passthrought:true)
@Post('login')
async login(
@Body()body: LoginUserDTO,
@Res({passthrough: true}) response: Response
): Promise<any> {
const user = await this.userService.getOne({where: {"user_email": body.email}});
if(!user) {
throw new NotFoundException('User not found')
}
if(!await bcrypt.compare(body.password, user.user_password)) {
throw new BadRequestException('Password incorrect');
}
const frontendDomain = this.configService.get<string>('FRONTEND_DOMAIN');
const jwtToken = await this.jwtService.signAsync({id: user.user_id});
response.cookie('jwt', jwtToken, {httpOnly: true, domain: frontendDomain,});
return {'jwt': jwtToken}
}
奇怪的是,解决我的问题是将域名添加到response.cookie.
还有我用于CORS和cookie域的开发环境变量:
FRONTEND_URL = http://localhost:3333
FRONTEND_DOMAIN = localhost
希望我的代码能帮上忙
评论中的对话:
客户端的Axios需要将< code>withCredentials设置为< code>true才能将cookies发送回服务器。服务器正在按预期发送和设置颜色。
我只想在假设有一个值列表的单元格中添加一个JComboBox。下面是我的代码,但它在列中的所有单元格中添加了组合框。让我知道我的代码中缺少了什么,以便只在选定的单元格上设置组合框。
我正在使用JAXB来生成一个肥皂xml请求。我想要的当前xml输出是这个 到目前为止,我已经生成了信封和标题标签,但我有安全标签的问题。 我的问题是,如果我尝试将xmlns设置为package-info.class前缀是正确的,但是和转到根元素(信封)而不是安全标记。这是我得到的输出: 正如您在所需的 xml 输出中看到的 和 命名空间位于安全标记处。如何才能将这些xmlns添加到安全标签?以及用
问题内容: 在SQL中,是否有一种方法可以强制一组列中只有一个列具有值,而其他列为null?可能是制约因素还是触发因素?这种类型的东西可能是用于查找表的,但是是否有其他替代表设计可能会更好地完成此工作呢? 例如: 主要问题是这些列都是其他表的FK,因此我无法将它们折叠为单个列。 我正在使用SQL Server,但是任何答案都可以。 问题答案: @tvanfosson的建议约束可以在三列中正常工作,
问题内容: 我正在尝试使用JavaFX中的WebView入门,但是当尝试打开WebView时,我收到以下所示的错误,我该如何解决此问题? 问题答案: 尝试运行WebView时遇到任何错误时,请确保您的VM选项包含模块javafx.web。 虚拟机选项: 在IntelliJ中,您可以通过转到IDE右上方的“编辑配置”按钮来访问VM选项。
问题内容: 我已经使用数据库中的SQL数据库开发了一个窗口服务,该数据库中的记录已满,因此查询执行需要很多时间,而默认命令超时是30S,但我想将其增加到120S。 但是我的应用程序中有很多方法,因此我想从APP.config文件中进行设置,这样它将适用于应用程序级别,任何人都可以告诉我如何实现此目标 谢谢 问题答案: 实现此目的的最简单方法是在类似以下内容的地方添加新条目: 然后,创建一个将填充值
问题内容: 我有一个模型: 如何编写基于类的视图,该视图创建新的模型实例并将外键设置为? 问题答案: 我通过覆盖方法解决了这个问题。下面是详细说明的样式: 但是我们可以简短地说(感谢dowjones123),在docs中提到了这种情况。