☰
instagram-private-api 登录响应模型详解:AccountRepositoryLoginResponseRootObject 接口完全指南
2026/10/15 9:50:53 网站建设 项目流程
  • 后端

【免费下载链接】instagram-private-api

NodeJS Instagram private API SDK. Written in TypeScript.

项目地址:https://gitcode.com/gh_mirrors/in/instagram-private-api
点击查看免费下载

本篇技术指南围绕 instagram-private-api(NodeJS Instagram Private API SDK)中AccountRepositoryLoginResponseRootObject接口展开,它是调用ig.account.login()成功后服务器返回响应的 TypeScript 类型骨架。读者读完本文后,将能完整掌握登录成功响应的字段结构与语义、其嵌套的logged_in_user用户画像与nametag数据模型,理解该响应在底层登录请求与二次验证(2FA)流程中的真实位置,并学会基于该模型编写会话持久化与账号状态判断代码。

接口概览:登录成功响应的顶层骨架

AccountRepositoryLoginResponseRootObject是登录接口响应体的根对象模型,定义于 src/responses/account.repository.login.response.ts,并经 src/responses/index.ts 统一导出,供仓库内各模块复用。该接口在 TypeDoc 中归属于responses模块,详见 responses 模块说明。

整个根对象只包含两个顶层属性,结构非常精简:

属性名类型说明
logged_in_userAccountRepositoryLoginResponseLogged_in_user登录成功后返回的当前用户完整信息对象,是后续会话中访问账号身份数据的主要入口
statusstring接口请求状态标志,正常情况下取值为"ok",用于快速校验本次请求是否成功

从源码结构可以推断:status字段在 instagram-private-api 的绝大多数响应模型中都会出现(如 status.response.ts 中的StatusResponse),属于 Instagram 私有 API 的通用响应约定;而logged_in_user则是登录场景独有的业务数据,承载本次登录用户的全部画像。

logged_in_user:登录用户的完整数据画像

AccountRepositoryLoginResponseLogged_in_user是根对象中最重要的嵌套接口,同样是登录响应模型的一部分,包含 22 个字段,覆盖了账号身份、资料、安全设置与业务属性四个维度。完整字段及类型如下:

属性名类型语义
pknumber用户唯一数字 ID,是 instagram-private-api 全库中引用用户的核心主键
usernamestring登录用户名(唯一标识)
full_namestring用户显示名称(昵称)
is_privateboolean是否为私密账号(关注需审核)
profile_pic_urlstring头像图片 URL
profile_pic_idstring头像对应的媒体 ID
is_verifiedboolean是否通过官方认证(蓝 V)
has_anonymous_profile_pictureboolean是否使用系统默认匿名头像
can_boost_postboolean账号是否具备推广(Boost)帖子权限
is_businessboolean是否为商业账号
account_typenumber账号类型数值标识(如个人/商业等枚举)
is_call_to_action_enablednull是否启用行动号召按钮,当前模型中固定为null
can_see_organic_insightsboolean是否有权查看自然流量数据洞察
show_insights_termsboolean是否需要展示数据洞察服务条款
reel_auto_archivestring快拍(Reels/Story)自动归档设置
has_placed_ordersboolean是否在平台内下过单(电商相关)
allowed_commenter_typestring允许评论者的范围策略
nametagAccountRepositoryLoginResponseNametag账号 Nametag(名签)配置对象
allow_contacts_syncboolean是否允许通讯录同步
phone_numberstring绑定的手机号
country_codenumber手机号国家码
national_numbernumber手机号国内号码部分

其中pk字段尤为关键:后续所有 Feed、Repository 调用(如ig.user.info(pk)、ig.account.currentUser()等)都需要依赖该 ID 定位目标用户,因此登录成功后第一步通常是保存logged_in_user.pk。

nametag 嵌套结构:账号名签配置

logged_in_user.nametag字段的类型是独立的AccountRepositoryLoginResponseNametag接口,包含 4 个属性:

属性名类型语义
modenumberNametag 的展示模式(数值枚举)
gradientstring名签背景渐变色配置
emojistring名签上叠加的表情符号
selfie_stickerstring自拍贴纸配置

该接口定义于 src/responses/account.repository.login.response.ts,与其余两个接口共处同一源文件,方便统一维护。

响应在登录流程中的真实位置:源码级调用链

该根对象并非孤立的数据类型,而是AccountRepository.login()方法的直接响应体。在 src/repositories/account.repository.ts 中,登录流程如下:

  1. 若尚未获取密码加密公钥,先调用this.client.qe.syncLoginExperiments()同步登录实验参数;
  2. 调用this.encryptPassword(password)对密码进行加密(详见下文);
  3. 向/api/v1/accounts/login/发送签名后的表单,其泛型即为AccountRepositoryLoginResponseRootObject:
    this.client.request.send<AccountRepositoryLoginResponseRootObject>({ method: 'POST', url: '/api/v1/accounts/login/', form: this.client.request.sign({ username, enc_password: `#PWD_INSTAGRAM:4:${time}:${encrypted}`, guid: this.client.state.uuid, phone_id: this.client.state.phoneId, _csrftoken: this.client.state.cookieCsrfToken, device_id: this.client.state.deviceId, adid: this.client.state.adid, google_tokens: '[]', login_attempt_count: 0, country_codes: JSON.stringify([{ country_code: '1', source: 'default' }]), jazoest: AccountRepository.createJazoest(this.client.state.phoneId), }), });
  4. 成功后方法返回response.body.logged_in_user,即最终向外暴露的类型是AccountRepositoryLoginResponseLogged_in_user,而非根对象本身。

也就是说,AccountRepositoryLoginResponseRootObject承担的是“请求发送层的响应容器”角色,logged_in_user才是业务层真正消费的数据。这种“根对象包裹业务实体”的模式贯穿整个仓库的响应设计,与 账号当前用户响应、挑战状态响应 等保持一致。

密码加密与时间戳的生成

encryptPassword()(src/repositories/account.repository.ts)实现了 Instagram 私密 API 的密码传输协议:

  • 随机生成 32 字节 AES 密钥与 12 字节 GCM IV;
  • 使用服务端下发的 RSA 公钥(passwordEncryptionPubKey)加密该 AES 密钥;
  • 以 AES-256-GCM 加密明文密码,并将当前 Unix 秒级时间戳作为 AAD(附加认证数据);
  • 最终拼装出#PWD_INSTAGRAM:4:${time}:${encrypted}形式的enc_password表单字段。

这也是登录请求中enc_password的来源,理解它能帮助你排查登录类网络问题。

二因素认证(2FA):同一响应模型的另一入口

当账号开启两步验证时,login()会抛出IgLoginTwoFactorRequiredError,此时需要调用AccountRepository.twoFactorLogin()(src/repositories/account.repository.ts)完成二次认证。值得注意的是,该方法同样以AccountRepositoryLoginResponseLogged_in_user为响应体类型:

const { body } = await this.client.request.send<AccountRepositoryLoginResponseLogged_in_user>({ url: '/api/v1/accounts/two_factor_login/', method: 'POST', form: this.client.request.sign({ verification_code: options.verificationCode, _csrftoken: this.client.state.cookieCsrfToken, two_factor_identifier: options.twoFactorIdentifier, username: options.username, trust_this_device: options.trustThisDevice, guid: this.client.state.uuid, device_id: this.client.state.deviceId, verification_method: options.verificationMethod, }), }); return body;

因此,无论走常规登录还是 2FA 登录,最终获得的用户对象结构完全一致,业务代码无需区分两种路径。twoFactorLogin的参数由 AccountTwoFactorLoginOptions 定义:verificationCode、twoFactorIdentifier、username为必填,trustThisDevice(默认'1')与verificationMethod('1'表示短信,'0'表示 TOTP)可选。

登录失败侧的响应模型

与成功响应相对,登录失败时的错误体由AccountRepositoryLoginErrorResponse描述(src/responses/account.repository.login.error.response.ts),其中error_type字段被 login() 的错误分支 用来区分异常:

  • bad_password→ 抛出 IgLoginBadPasswordError;
  • invalid_user→ 抛出 IgLoginInvalidUserError;
  • two_factor_required为真 → 抛出 IgLoginTwoFactorRequiredError。

这些错误类均继承自IgResponseError<AccountRepositoryLoginErrorResponse>,因此可以通过err.response.body访问 AccountRepositoryLoginErrorResponseTwoFactorInfo 中的username、totp_two_factor_on、sms_two_factor_on、two_factor_identifier、obfuscated_phone_number等字段来驱动 2FA 交互流程。

实战:登录响应的典型消费方式

1. 登录并保存会话状态

会话持久化示例 展示了登录响应在真实程序中的典型用法:login()返回logged_in_user后,可通过ig.request.end$流在每次请求结束时调用ig.state.serialize()序列化状态(剔除constants版本信息),下次启动时用ig.state.deserialize()恢复会话,从而避免频繁重新登录。

const ig = new IgApiClient(); ig.state.generateDevice(process.env.IG_USERNAME); ig.state.proxyUrl = process.env.IG_PROXY; ig.request.end$.subscribe(async () => { const serialized = await ig.state.serialize(); delete serialized.constants; fakeSave(serialized); }); await ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD);

2. 处理 2FA 登录

2FA 短信登录示例 演示了如何消费错误响应中的two_factor_info:

return Bluebird.try(() => ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD)).catch( IgLoginTwoFactorRequiredError, async err => { const { username, totp_two_factor_on, two_factor_identifier } = err.response.body.two_factor_info; const verificationMethod = totp_two_factor_on ? '0' : '1'; // '0'=TOTP,'1'=短信 // 获取验证码后调用 twoFactorLogin 完成登录 return ig.account.twoFactorLogin({ username, verificationCode: code, twoFactorIdentifier: two_factor_identifier, verificationMethod, trustThisDevice: '1', }); }, );

3. 基于字段的业务判断

拿到logged_in_user后,可直接根据字段做账号状态判断,例如:

const user = await ig.account.login(username, password); const isBusiness = user.is_business; // 商业号判断 const accountType = user.account_type; // 账号类型枚举 const canPostPromotions = user.can_boost_post; // 推广权限 const isPrivate = user.is_private; // 私密号判断 const verified = user.is_verified; // 官方认证判断

4. 在挑战(Challenge)流程中的复用

src/responses/challenge.state.response.ts 中的ChallengeStateResponse也引用了AccountRepositoryLoginResponseLogged_in_user(可选字段logged_in_user?),说明在登录触发的安全检查(如 checkpoint)通过后,同一用户对象模型会被复用,进一步印证了该接口作为“登录后用户身份标准载体”的地位。

小结

AccountRepositoryLoginResponseRootObject是 instagram-private-api 登录体系响应层的根类型,结构虽仅两个字段,却锚定了整个 SDK 使用前的第一份数据——logged_in_user所携带的 22 个用户字段与嵌套的nametag,加上配套的 Logged_in_user 接口文档 与 Nametag 接口文档,共同构成了登录后账号画像的完整类型体系。无论你是做会话管理、账号状态判断还是 2FA 交互,从理解这个接口开始都是最直接的切入点。

  • 后端

【免费下载链接】instagram-private-api

NodeJS Instagram private API SDK. Written in TypeScript.

项目地址:https://gitcode.com/gh_mirrors/in/instagram-private-api
点击查看免费下载
上一篇:Kill Argument Report — <paper title>
下一篇:Hyperopt 搜索空间定义完全指南:理解 pyll 随机程序与全部 12 种超参数表达式

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询