我想使用 IP 地址构建简单的身份验证,我列入白名单的某些 IP 地址可以访问 API。但是当我request.ip只使用它时,我遇到了一个问题::1,它的输出不是真实的IP地址。
如何在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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
事实证明,这::1是“localhost”的有效地址,但当我将其部署在服务器上并从浏览器访问应用程序时,其日志::ffff:127.0.0.1不是我的真实 IP。
X-Forwarded-For正如我在 Discord 中提到的,您可以使用标头nginx作为反向代理。获取的原因::1是因为这是代理运行的 IP(即localhost或127.0.0.1)
| 归档时间: |
|
| 查看次数: |
11380 次 |
| 最近记录: |