.NET ile Facebook Üyelik
Üyeleriniz Facebook hesapları ile giriş yapsın!
Facebook.com üyelik alt yapısını kullanıp, hazırladığınız web sitelerinin üyelik kayıtlarını Facebook'un bir aplikasyonu olan "Login with Facebook" ile entegre edebilirsiniz. Dünya üzerinden yaygın üye ağını sahip ve ülkemizde de yaygın olarak yaklaşık 25 milyon Türk kullanıcısının üye olduğu Facebook hesaplarının ayı hesap bilgilerini kullanarak web sitemize üye olmaları bir avantaj sağlar. Yeniden üyelik giriş formu doldurmayacakları gibi sıklıkla kullandıkları facebook hesap bilgileriyle giriş yapabilmelerini sağlarsak hem onlara kolay bir üyelik sistemi sağlamış oluruz hem de üye sayımızın daha fazla artmasını sağlarız.
İşleme başlamadan önce facebook.com üzerinde kayıtlı bir hesabımızın olması gerektiğini unutmayalım. Facebook.com sayfamıza giriş yaptıktan sonra
http://developers.facebook.com/setup adresine girip sitemiz için bir uygulama oluşturacağız.
Site name : Web sitenizin adı olacak.
Site URL : Web sitenizin adresi olacak. ( sonunda "?" yada "#" gibi dinamik sayfaların olduğu adresler kabul edilmiyor. Tam adres olmalıdır.)
Locale : Web sitemizde kullandığımız dili seçmeliyiz.
Uygulama oluşturma işlemini bitirdiğimiz facebook.com bize daha sonra kullanmak üzere APP ID ve APP SECRET olarak iki değişken verecektir. APP ID ve APP SECRET değişkenlerimiz oluştuktan sonra facebook.com üzerinden veri çekebilmemiz yada veri yazabilmemiz için
"Graph Api" denilen bir servisi kullanmamız gerekmektedir. Servis detaylarına aşağıda bulunan URL üzerinden ulaşabilirsiniz.
http://developers.facebook.com/docs/apiBu tarz entegrasyonları ASP.NET web projelerimizde kullanabilmemiz için
codeplex.com üzerinde açık kaynak kod olarak geliştirilen
Hammock adlı projedeki bazı classları kullanacağız. Hammock projesine aşağıdaki URL'den ulaşabilirsiniz.
Download Demo ProjectGerekli dosyaları edindikten sonra yeni bir web projemiz yada mevcut projemiz ile entegrasyona geçelim.
AppID ve AppSecret değerlerimizi projemizin web.config dosyamızın içine ekleyelim.
İndirdiğimiz Hammock projesindeki
Hammock.dll dosyasını projemize referans ederek ekleyelim. Web.Config dosyamızdaki değişiklikleri yaptıktan sonra ve DLL dosyamızı ekledikten sonra sitemizdeki login bölümünden
graph.facebook.com adresine bir yönlendirmede bulunmamız gerekmektedir. Linki tanımlarken bize özel türetilmiş olan AppID değerini ve serviten dönecek olan kendi sayfamızın adresini ki facebookCallback.aspx olarak daha sonra sayfayı oluşturacağız, bunları belirlemeliyiz. Gideceği sayfada kullanıcı web sitemizin bilgilerine erişebilmesi için izin verdiği takdirde belirtmiş oldğumuz callback sayfamıza
("facebookCallback.aspx") belli değerler ile geri dönüş yapacak.
Yukarıda oluşan linkten gelecek sonucu işleyebilmemiz için callback sayfası’nın page_load() eventında dönen sonuçları işleyerek kullanıcı bilgilerine erişeceğiz.
protected void Page_Load(object sender, EventArgs e)
{
//Kullanıcı izin verdiye servisten bize code isminde bir değer dönmesi gerekiyor
if (!string.IsNullOrEmpty(Request["code"]) && !Page.IsPostBack)
{
VeriCek();
}
}
private void VeriCek()
{
//Authority işlemleri için kullanılan client ve request nesnelerimizi oluşturuyoruz
RestClient client = new RestClient { Authority = "https://graph.facebook.com/oauth/" };
RestRequest request = new RestRequest { Path = "access_token" };
//Facebook AppID değerimiz
request.AddParameter("client_id", ConfigurationManager.AppSettings["FacebookAppID"]);
//Daha önceden de kullandığımız callback adresimiz
request.AddParameter("redirect_uri", "http://www.marenova.net/facebookCallback.aspx");
//Facebook AppSecret değerimiz
request.AddParameter("client_secret", ConfigurationManager.AppSettings["FacebookAppSecret"]);
//Bize geri dönen code değerimiz
request.AddParameter("code", Request["code"]);
RestResponse response = client.Request(request);
//Dönen değerlerin dönüşüm işlemlerini tamamlıyoruz
StringDictionary result = Parse(response.Content);
string appToken = result["access_token"];
//appToken değişkeni bizim verdiğimiz değerlerle servisin verdiği değişkenleri karşılaştırarak
//yeni değer üretir, daha sonra bu değişkenle tekrar servise bağlanıp istekte bulunduğumuz nesneyi
//bize geri bildirilmesini sağlar
Detay(appToken);
}
private StringDictionary Parse(string queryString)
{
queryString = queryString + "&";
StringDictionary outc = new StringDictionary();
Regex r = new Regex(@"(?<name>[^=&]+)=(?<value>[^&]+)&", RegexOptions.IgnoreCase | RegexOptions.Compiled);
IEnumerator enums = r.Matches(queryString).GetEnumerator();
while (enums.MoveNext() && enums.Current != null)
{
outc.Add(((Match)enums.Current).Result("${name}"), ((Match)enums.Current).Result("${value}"));
}
return outc;
}
private void Detay(string sToken)
{
//Authority işlemleri için kullanılan client ve request nesnelerimizi oluşturuyoruz
RestClient client = new RestClient { Authority = "https://graph.facebook.com/" };
//Path değerimiz "me" yani login olan kullanıcı bilgilerini bize geri döndürüyor.
//Bu kısımda bir çok path değerleri var. Ör: me/friends, me/photos gibi...
RestRequest request = new RestRequest { Path = "me" };
request.AddParameter("access_token", sToken);
RestResponse response = client.Request(request);
JavaScriptSerializer ser = new JavaScriptSerializer();
//Bize dönen değer json formatında bir User nesnesi,
//Uygun bir C# clasına direkt atama yaptırabiliyoruz.
SocialUser user = ser.Deserialize<SocialUser>(response.Content);
if (user != null)
{
//user.id değeri her kullanıcı için unique bir değer
//Sizde bu değere göre kendi projenizde ilişkilendirmeler yapabilirsiniz.
//Gerisi sizin hayal gücünüze kalmış :)
Response.Write(user.name + "/" + user.id + "<br><img src=\"https://graph.facebook.com/" + user.id + "/picture\">");
}
}
Projemizde kullandığımız SocialUser nesnemiz.
public class SocialUser
{
public string id { get; set; }
public string name { get; set; }
public string email { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
}