ios - firebase auth 用户照片 URL 返回 404
<p><p>几个月来,我一直在 swift 应用程序中使用 firebase 身份验证,但今天突然由于用户照片 URL 指向 404 页面,该应用程序崩溃了。</p>
<p>获取我使用的图片:</p>
<pre><code>let user = FIRAuth.auth()?.currentUser
userPhoto = user.photoURL?.absoluteString
</code></pre>
<p>userPhoto URL 指向损坏的机器人 404 页面,但仅限于一个特定用户。
登录这个有问题的 Google 帐户时,个人资料图片会正确显示。</p>
<p>我尝试退出并重新登录,以及更改帐户的个人资料图片。
有什么想法吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我不知道 IOS/Swift,但我遇到了同样的问题。似乎 Firebase Auth 缓存了 photoURL,我无法弄清楚如何强制刷新,但解决方案是在错误时显示默认图像。在 javascript/HTML 中,它如下所示。注意:有一个 CSS 解决方案使用 <code>:before</code> 和 <code>:after</code> 伪类来显示自定义后备图像,但它有点 hacky 所以我写了这个。我知道这并不快,但也许您可以将其用作为 IOS 编写类似代码的指南。</p>
<pre><code>function returnPhotoURL(){
return new Promise(function(resolve, reject){
var img = new Image();
//if the user does not have a photoURL let's try and get one from gravatar
if (!firebase.auth().currentUser.photoURL) {
//first we have to see if user han an email
if(firebase.auth().currentUser.email){
//set sign-in-button background image to gravatar url
img.addEventListener('load', function() {
resolve (getGravatar(firebase.auth().currentUser.email, 48));
}, false);
img.addEventListener('error', function() {
resolve ('//rack.pub/media/fallbackImage.png');
}, false);
img.src = getGravatar(firebase.auth().currentUser.email, 48);
} else {
resolve ('//rack.pub/media/fallbackImage.png');
}
} else {
img.addEventListener('load', function() {
resolve (firebase.auth().currentUser.photoURL);
}, false);
img.addEventListener('error', function() {
resolve ('https://rack.pub/media/fallbackImage.png');
}, false);
img.src = firebase.auth().currentUser.photoURL;
}
});
}
function getGravatar(email, size) {
// MD5 (Message-Digest Algorithm) by WebToolkit
var MD5 = function(s) {
function L(k, d) {
return (k << d) | (k >>> (32 - d))
}
function K(G, k) {
var I, d, F, H, x;
F = (G & 2147483648);
H = (k & 2147483648);
I = (G & 1073741824);
d = (k & 1073741824);
x = (G & 1073741823) + (k & 1073741823);
if (I & d) {
return (x ^ 2147483648 ^ F ^ H)
}
if (I | d) {
if (x & 1073741824) {
return (x ^ 3221225472 ^ F ^ H)
}
else {
return (x ^ 1073741824 ^ F ^ H)
}
}
else {
return (x ^ F ^ H)
}
}
function r(d, F, k) {
return (d & F) | ((~d) & k)
}
function q(d, F, k) {
return (d & k) | (F & (~k))
}
function p(d, F, k) {
return (d ^ F ^ k)
}
function n(d, F, k) {
return (F ^ (d | (~k)))
}
function u(G, F, aa, Z, k, H, I) {
G = K(G, K(K(r(F, aa, Z), k), I));
return K(L(G, H), F)
}
function f(G, F, aa, Z, k, H, I) {
G = K(G, K(K(q(F, aa, Z), k), I));
return K(L(G, H), F)
}
function D(G, F, aa, Z, k, H, I) {
G = K(G, K(K(p(F, aa, Z), k), I));
return K(L(G, H), F)
}
function t(G, F, aa, Z, k, H, I) {
G = K(G, K(K(n(F, aa, Z), k), I));
return K(L(G, H), F)
}
function e(G) {
var Z;
var F = G.length;
var x = F + 8;
var k = (x - (x % 64)) / 64;
var I = (k + 1) * 16;
var aa = Array(I - 1);
var d = 0;
var H = 0;
while (H < F) {
Z = (H - (H % 4)) / 4;
d = (H % 4) * 8;
aa = (aa | (G.charCodeAt(H) << d));
H++
}
Z = (H - (H % 4)) / 4;
d = (H % 4) * 8;
aa = aa | (128 << d);
aa = F << 3;
aa = F >>> 29;
return aa
}
function B(x) {
var k = "",
F = "",
G, d;
for (d = 0; d <= 3; d++) {
G = (x >>> (d * 8)) & 255;
F = "0" + G.toString(16);
k = k + F.substr(F.length - 2, 2)
}
return k
}
function J(k) {
k = k.replace(/rn/g, "n");
var d = "";
for (var F = 0; F < k.length; F++) {
var x = k.charCodeAt(F);
if (x < 128) {
d += String.fromCharCode(x)
}
else {
if ((x > 127) && (x < 2048)) {
d += String.fromCharCode((x >> 6) | 192);
d += String.fromCharCode((x & 63) | 128)
}
else {
d += String.fromCharCode((x >> 12) | 224);
d += String.fromCharCode(((x >> 6) & 63) | 128);
d += String.fromCharCode((x & 63) | 128)
}
}
}
return d
}
var C = Array();
var P, h, E, v, g, Y, X, W, V;
var S = 7,
Q = 12,
N = 17,
M = 22;
var A = 5,
z = 9,
y = 14,
w = 20;
var o = 4,
m = 11,
l = 16,
j = 23;
var U = 6,
T = 10,
R = 15,
O = 21;
s = J(s);
C = e(s);
Y = 1732584193;
X = 4023233417;
W = 2562383102;
V = 271733878;
for (P = 0; P < C.length; P += 16) {
h = Y;
E = X;
v = W;
g = V;
Y = u(Y, X, W, V, C, S, 3614090360);
V = u(V, Y, X, W, C, Q, 3905402710);
W = u(W, V, Y, X, C, N, 606105819);
X = u(X, W, V, Y, C, M, 3250441966);
Y = u(Y, X, W, V, C, S, 4118548399);
V = u(V, Y, X, W, C, Q, 1200080426);
W = u(W, V, Y, X, C, N, 2821735955);
X = u(X, W, V, Y, C, M, 4249261313);
Y = u(Y, X, W, V, C, S, 1770035416);
V = u(V, Y, X, W, C, Q, 2336552879);
W = u(W, V, Y, X, C, N, 4294925233);
X = u(X, W, V, Y, C, M, 2304563134);
Y = u(Y, X, W, V, C, S, 1804603682);
V = u(V, Y, X, W, C, Q, 4254626195);
W = u(W, V, Y, X, C, N, 2792965006);
X = u(X, W, V, Y, C, M, 1236535329);
Y = f(Y, X, W, V, C, A, 4129170786);
V = f(V, Y, X, W, C, z, 3225465664);
W = f(W, V, Y, X, C, y, 643717713);
X = f(X, W, V, Y, C, w, 3921069994);
Y = f(Y, X, W, V, C, A, 3593408605);
V = f(V, Y, X, W, C, z, 38016083);
W = f(W, V, Y, X, C, y, 3634488961);
X = f(X, W, V, Y, C, w, 3889429448);
Y = f(Y, X, W, V, C, A, 568446438);
V = f(V, Y, X, W, C, z, 3275163606);
W = f(W, V, Y, X, C, y, 4107603335);
X = f(X, W, V, Y, C, w, 1163531501);
Y = f(Y, X, W, V, C, A, 2850285829);
V = f(V, Y, X, W, C, z, 4243563512);
W = f(W, V, Y, X, C, y, 1735328473);
X = f(X, W, V, Y, C, w, 2368359562);
Y = D(Y, X, W, V, C, o, 4294588738);
V = D(V, Y, X, W, C, m, 2272392833);
W = D(W, V, Y, X, C, l, 1839030562);
X = D(X, W, V, Y, C, j, 4259657740);
Y = D(Y, X, W, V, C, o, 2763975236);
V = D(V, Y, X, W, C, m, 1272893353);
W = D(W, V, Y, X, C, l, 4139469664);
X = D(X, W, V, Y, C, j, 3200236656);
Y = D(Y, X, W, V, C, o, 681279174);
V = D(V, Y, X, W, C, m, 3936430074);
W = D(W, V, Y, X, C, l, 3572445317);
X = D(X, W, V, Y, C, j, 76029189);
Y = D(Y, X, W, V, C, o, 3654602809);
V = D(V, Y, X, W, C, m, 3873151461);
W = D(W, V, Y, X, C, l, 530742520);
X = D(X, W, V, Y, C, j, 3299628645);
Y = t(Y, X, W, V, C, U, 4096336452);
V = t(V, Y, X, W, C, T, 1126891415);
W = t(W, V, Y, X, C, R, 2878612391);
X = t(X, W, V, Y, C, O, 4237533241);
Y = t(Y, X, W, V, C, U, 1700485571);
V = t(V, Y, X, W, C, T, 2399980690);
W = t(W, V, Y, X, C, R, 4293915773);
X = t(X, W, V, Y, C, O, 2240044497);
Y = t(Y, X, W, V, C, U, 1873313359);
V = t(V, Y, X, W, C, T, 4264355552);
W = t(W, V, Y, X, C, R, 2734768916);
X = t(X, W, V, Y, C, O, 1309151649);
Y = t(Y, X, W, V, C, U, 4149444226);
V = t(V, Y, X, W, C, T, 3174756917);
W = t(W, V, Y, X, C, R, 718787259);
X = t(X, W, V, Y, C, O, 3951481745);
Y = K(Y, h);
X = K(X, E);
W = K(W, v);
V = K(V, g)
}
var i = B(Y) + B(X) + B(W) + B(V);
return i.toLowerCase()
};
var size = size || 80;
return 'https://www.gravatar.com/avatar/' + MD5(email) + '.jpg?s=' + size;
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - firebase auth 用户照片 URL 返回 404,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/42727333/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/42727333/
</a>
</p>
页:
[1]