Firebase facebook登录照片网址签名已过期

时间:2017-01-18 04:34:06

标签: firebase firebase-authentication facebook-login

我在我的APP中使用Firebase(angularfire)和Facebook登录来验证我的用户。但是今天我意识到个人资料图片网址已过期,但Firebase SDK并未刷新。

有没有办法解决这个问题,还是应该使用Facebook API请求图像?

4 个答案:

答案 0 :(得分:11)

我通过使用可在以下位置找到的photoURL解决了这个问题:user.providerData[0].photoURL 其中user

上返回的用户数据
firebase.auth().onAuthStateChanged( user => {})

[0]是感兴趣的身份验证提供程序的索引。在我的情况下,我只有Facebook身份验证,因此索引是0。

似乎此网址正在以某种方式更新...(可能在用户登录?)

修改:似乎网址确实正在根据用户登录进行更新。请注意,如果用户被记住"通过浏览器,使用此方法如果用户在到期前未被强制再次登录,则图片最终会过期。

答案 1 :(得分:1)

Firebase仅在您使用提供商登录后才会更新此数据:

  1. 用户使用Facebook登录。填充了Facebook提供商数据。
  2. 用户更新他们的Facebook photoURL。
  3. 用户再次使用Facebook登录,更新了facebook提供商的photoURL。
  4. 再次登录是关键。用户重新加载不会刷新用户属性。

    但顶级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();
    }
}