Microsoft.AspNet.Facebook paket Atlanan izinleri belirlemek için bir çerez içinde kullanıcının istenen izinlere izler. Bu güncellemeden önce, ASP.NET Facebook Uygulamaları için isteğe bağlı izinlerin atlanması, Safari’de çalıştırıldığında sonsuz döngülere neden oldu. Safari, Microsoft.AspNet.Facebook paketinin oluşturmaya çalıştığı çerezleri engellediği için oluyordu. Çerezler oluşturulmadığından, paketin hangi izinlerin atlandığını belirleme yolu yoktu, böylece izinler iletişim kutusu sonsuza dek tekrarlanacak. Ayrıca, kullanıcıya neler olduğunu bildiren bir hata mesajı yoktu. Bu sürümde bu deneyimi çok daha iyi yaptık. Çerezler etkin olmadığında geliştiriciler artık bir hata sayfasına yönlendirebilir.
Bu sürümde eklenen özellikler
CannotCreateCookieRedirectPath Configuration
Çerçeve çerezleri oluşturamadığında kullanıcıların nereye yönlendirileceğini kontrol etmek için web.config dosyasındaki CannotCreateCookieRedirectPath öğesini ayarlayabilirsiniz . Yapılandırma değeri ayarlanmışsa, çerçeve kullanıcıyı hata sayfasına yönlendirir; Aksi takdirde, https://www.facebook.com adresine yönlendirir.
OnCannotCreateCookies Kanca
Adından da anlaşılacağı gibi, Microsoft.AspNet.Facebook paketi, tarayıcı kısıtlamaları veya kullanıcı ayarları nedeniyle çerezler oluşturamıyorsa çağrılır . Varsayılan olarak, sağladığı bir yönlendirme yolu arar CannotCreateCookieRedirectPath içinde FacebookConfiguration .
NOT: Bu kanca çağrıldığında, varsayılan OnCannotCreateCookies mantığı geçersiz kılınmazsa , başka istemler tetiklenir .
Geliştiriciler, gerekirse özel mantıklarını eklemek için bu kancayı geçersiz kılabilir.
Aşağıda birkaç örnek belirtilmiştir.
AllowContext.Result öğesini null olarak ayarlayın.
Bir hata sayfasına veya https://www.facebook.com adresine yönlendirmek yerine, bu izinleri istemeden kullanıcıyı doğrudan uygulamaya yönlendirir.korumalı geçersiz kılma geçersiz kılma OnCannotCreateCookies ( PermissionContext allowContext ) { allowContext.Result = null ; }
korumalı geçersiz kılma geçersiz kılma geçersiz OnPermissionPrompt ( PermissionContext bağlamı) { FacebookPermission storagePermission = db.FacebookPermissions.Where (p => p.User == context.FacebookContext.UserId) .FirstOrDefault (); if (storedPermission == null ) { // Bu temel uygulamaya çağrılır , bunu kendi mantığınızla değiştirebilirsiniz. baz .OnPermissionPrompt (bağlam); } else { IEnumerable < string > requiredPermissions = storedPermission.RequestedPermissions.Split ( ‘,’ ); Sayısız <
string > declinedPermissions = context.DeclinedPermissions;
context.SkippedPermissions = demandPermissions.Except (context.DeclinedPermissions); bool reddedildiPermissions = context.MissingPermissions.Where (allow = > context.DeclinedPermissions.Contains (izin) || context.SkippedPermissions.Contains (izin). Any ();
if (deniedPermissions)
{ // Bu, temel uygulamaya çağrılır , bunu kendi mantığınızla değiştirebilirsiniz. baz .OnDeniedPermissionPrompt (bağlam); } else { // Bu temel uygulamaya çağrılır, bunu kendi mantığınızla değiştirebilirsiniz. baz .OnPermissionPrompt (bağlam); }
}
}
korumalı geçersiz kılma geçersiz kılma geçersiz OnCannotCreateCookies ( PermissionContext bağlamı) { FacebookPermission storagePermission = db.FacebookPermissions.Where (p => p.User == context.FacebookContext.UserId) .FirstOrDefault (); IEnumerable < string > demandPermissions = context.RequiredPermissions; string allowString = String .Join ( “,” , demandPermissions ); if (storedPermission == null ) { db.FacebookPermissions.Add ( yeni FacebookPermission {
User = context.FacebookContext.UserId,
RequestedPermissions = allowString
});
} else { if ( String .IsNullOrEmpty (storedPermission.RequestedPermissions)) {{ storagePermission.RequestedPermissions = allowString; } else { IEnumerable < string > unPersistedPermissions = demandPermissions.Except (storedPermission.RequestedPermissions.Split ( ‘,’ ));
foreach ( dize s olarak unPersistedPermissions)
{
db.Entry (storedPermission) .State = EntityState .Modified;
storedPermission.RequestedPermissions = Dize .Join ( “,” , storagePermission.RequestedPermissions, p);
}
}
}
db.SaveChanges ();
FacebookConfig.cs dosyasını açın ve değiştirinGlobalFilters .Filters.Add ( yeni FacebookAuthorizeFilter (yapılandırma));
ileGlobalFilters .Filters.Add ( yeni CustomAuthorizeFilter (configuration));
Çözümün tamamını burada bulabilirsiniz .
NOT : Bu basit bir sayfa Facebook uygulaması için bir rehberlik örneğidir. Çok sayfalı Facebook uygulamaları için ek bir mantık eklemeniz gerekebilir.
GIPHY App Key not set. Please check settings