使用passport.js进行Twitter身份验证



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

我有一个控制器,可以使用他们的推特"头像"更新用户的头像:

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 srchttps://abs.twimg.comhttps://*.twimg.comhttps://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;

我应该将其设置为什么?

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

最新更新