我在我的APP中使用Firebase(angularfire)和Facebook登录来验证我的用户。但是今天我意识到个人资料图片网址已过期,但Firebase SDK并未刷新。
有没有办法解决这个问题,还是应该使用Facebook API请求图像?
答案 0 :(得分:11)
我通过使用可在以下位置找到的photoURL解决了这个问题:user.providerData[0].photoURL
其中user
是
firebase.auth().onAuthStateChanged( user => {})
[0]
是感兴趣的身份验证提供程序的索引。在我的情况下,我只有Facebook身份验证,因此索引是0。
似乎此网址正在以某种方式更新...(可能在用户登录?)
修改:似乎网址确实正在根据用户登录进行更新。请注意,如果用户被记住"通过浏览器,使用此方法如果用户在到期前未被强制再次登录,则图片最终会过期。
答案 1 :(得分:1)
Firebase仅在您使用提供商登录后才会更新此数据:
再次登录是关键。用户重新加载不会刷新用户属性。
但顶级displayName和photoURL不会更新。您需要使用相关API手动执行此操作。
如果这不足以满足您的需求,您应该切换到使用Facebook API。
答案 2 :(得分:0)
使用Firebase中的Facebook照片的最佳方法是通过用户的Facebook ID:
const fbUID = userData.providerData[0].uid
const photoURL = 'https://graph.facebook.com/' + fbUID + '/picture?type=large'
这将为您提供不过期的图像,并且该图像也始终与用户的Facebook个人资料照片保持最新。更好的是,它的质量比原始质量高得多,任何人都可以看到它!此外,无需使用Facebook API来请求此请求。您实际上可以使用任何fbUID将该URL粘贴到浏览器中,它将直接转到用户当前的个人资料图片。
答案 3 :(得分:0)
将此用作您的图片网址
public class MyServiceLocator
{
private static MyServiceLocator _instance;
private IContainer _container;
private ILifetimeScope _myViewLifetimeScope;
private MyServiceLocator()
{
RegisterServices();
}
private void RegisterServices()
{
var builder = new ContainerBuilder();
builder.RegisterModule<MyAutofacModule>();
_container = builder.Build();
}
public static MyServiceLocator Instance => _instance ?? (_instance = new MyServiceLocator());
public IMyView MyView
{
get
{
_myViewLifetimeScope = _container.BeginLifetimeScope();
return _myViewLifetimeScope.Resolve<IMyView>();
}
}
public void EndMyViewLifetimeScope()
{
_myViewLifetimeScope?.Dispose();
}
}