【问题标题】:Twitter authentication with passport.js使用 passport.js 进行 Twitter 身份验证
【发布时间】:2018-05-03 01:56:33
【问题描述】:

这是一个关于 Twitter OAuth with passport.js () 的真正小众问题

我有一个控制器,它使用他们的 Twitter“头像”更新用户的头像:

const signInViaTwitter = (twitterProfile) => {
  return new Promise((resolve, reject) => {

    console.log(twitterProfile);

    // find if user exist on in
    User.findOne({ username: twitterProfile.username }, (error, user) => {
      if (error) { console.log(error); reject(error); }
      else {

        // user existed on db
        if (user) {
          // update the user with latest git profile info
          user.name = twitterProfile.displayName;
          user.username = twitterProfile.username;
          user.avatarUrl = twitterProfile.photos.value;
          user.email = '';

          // save the info and resolve the user doc
          user.save((error) => {
            if (error) { console.log(error); reject(error); }
            else { resolve(user); }
          });
        }

        // user doesn't exists on db
        else {
          // check if it is the first user (Adam/Eve) :-p
          // assign him/her as the admin
          User.count({}, (err, count) => {
            console.log('usercount: ' + count);

            let assignAdmin = false;
            if (count === 0) assignAdmin = true;

            // create a new user
            const newUser = new User({
              name: twitterProfile.displayName,
              username: twitterProfile.username,
              avatarUrl: twitterProfile.photos.value,
              email: '',
              role: assignAdmin ? 'admin' : 'user',
            });

            // save the user and resolve the user doc
            newUser.save((error) => {
              if (error) { console.log(error); reject(error); }
              else { resolve(newUser); }
            });

          });
        }
      }
    });
  });
};

用户身份验证有效 - 但由于某种原因,头像不会显示...这里是以下控制台输出:

拒绝加载图片'https://api.twitter.com/favicon.ico' 因为它违反了以下内容安全政策指令: "img-src https://abs.twimg.com https://*.twimg.com https://pbs.twimg.com数据:”。

有人知道这是什么意思吗?我认为这可能是由于处于开发模式 - 即http://localhost:8080/ ...并且它不会接受https??还是不会传回去?

更新:^我认为上述错误与未显示的图像无关...

稍微看一下html源代码:

<img class="styles__userAvatar___2x2U9" src="{unknown}" alt="Wind Up Lord Vexxos Avatar">

所以它显然是为 src 传入了一个未知变量——而不是用户的显示头像...

所以,对我来说,违规行是:

user.avatarUrl = twitterProfile.photos.value;

我应该把它设置成什么?

【问题讨论】:

    标签: javascript node.js twitter twitter-oauth passport.js


    【解决方案1】:

    只是一个想法,twitterProfile.photos 不是一个数组吗?也许你应该尝试访问 twitterProfile.photos[0].value

    【讨论】:

    • 是的,明白了。必须是简单的东西! XD
    • 总是这样 ;)
    猜你喜欢
    • 2023-04-03
    • 2023-04-05
    • 1970-01-01
    • 2020-01-02
    • 2012-08-06
    • 1970-01-01
    • 2018-01-17
    • 2013-06-26
    • 2016-07-22
    相关资源
    最近更新 更多