我想使用IP地址建立简单的身份验证,一些我列入白名单的IP地址可以访问API。但我遇到一个问题,当我使用request.ip
时,它只输出不是真实IP地址的::1
。
如何在nestjs中获取用户IP地址?下面是我现在的代码
import {
Injectable,
CanActivate,
ExecutionContext,
Logger,
} from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
const allowedIp: Array<string> = ['129.2.2.2', '129.2.2.2'];
if (process.env.ENV === 'production') {
const ip = request.connection.remoteAddress;
Logger.log(ip, 'ACCESSED IP ADDRESS');
if (allowedIp.includes(ip)) {
return true;
} else {
return false;
}
} else {
return true;
}
}
}
编辑:
原来::1
是'localhost‘的有效地址,但当我把它部署到服务器上并从浏览器访问应用程序时,它的日志::ffff:127.0.0.1
而不是我的真实IP。
发布于 2021-02-02 12:11:41
正如我在Discord上提到的,当您使用nginx
作为反向代理时,您可以使用头X-Forwarded-For
。获取::1
的原因是因为这是运行代理的IP (即localhost
或127.0.0.1
)
https://stackoverflow.com/questions/66003386
复制相似问题