typescript 无法更新用户的个人资料图片

tquggr8v  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(145)

所以next-auth目前的默认行为是只使用用户创建账户时的图像,我希望它能改变,这样如果用户改变了该提供商的图像,这个改变应该反映在网站上。
我发现的唯一一个类似问题是:https://github.com/nextauthjs/next-auth/discussions/1414
同样的方法也适用于这种情况,但是我无法访问我感兴趣的字段。signIn的签名为:signIn({ user, account, profile, email, credentials })
如果我console.log(profile)我得到如下:

{
  id: '218748538039828480',
  username: 'someUser',
  display_name: null,
  avatar: 'aa9f10fb12bb0f1ab225f78de5f06104',
  avatar_decoration: null,
  discriminator: '2043',
  public_flags: 256,
  flags: 256,
  banner: null,
  banner_color: '#6667ab',
  accent_color: 6711211,
  locale: 'en-GB',
  mfa_enabled: true,
  premium_type: 0,
  email: 'my@email.com',
  verified: true,
  image_url: 'https://cdn.discordapp.com/avatars/218748538039828480/aa9f10fb12bb0f1ab225f78de5f06104.png'
}

在这里,我们实际上找到了所需的内容,image_url字段包含最新的映像。
但是TS和IntelliSense不让我访问它。profile.<>的唯一选项是emailimagenamesub。所有这些选项都返回字符串或未定义,我尝试的图像总是返回未定义。尽管image_url显然是我们想要的图像。

kiz8lqtg

kiz8lqtg1#

如果您确信image_url将始终存在,则不会造成太大的伤害:

//@ts-ignore
const imageUrl = profile.image_url;
const imageUrl = (profile as unknown as { image_url: string }).image_url;
const imageUrl: string = (profile as any).image_url;

你总是可以安全地使用一个保护子句:

if (!("image_url" in profile)) {
    // no image_url
}

或者干脆自己制作图片的URL

const imageUrl = `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.png`;

(this不和谐头像的网址是什么样的用户ID,后跟哈希)

相关问题