Asp İle Facebook Login Ve Üyelik İşlemleri
-
ASP ile olan kısımları iki şekilde halledebilirdik; ismini hatırlayamadığım bi pehlivanın (tüm dünya bu Türkün classını kullanıyor :)) json classını kullanarak oAuth2.0 ile graph api almak ve bunları bir güzel işlemek. Diğeri ise benim yaptığım gibi sadece ASP ile cebelleşmeden jquerynin nimetlerinden faydalanmak.
Sanıyorum az önce giriş yaptırmayı kontrol ettirmeyi ve son olarak bilgileri almayı öğrendik. Bundan sonrası ise çocuk oyuncağı.
jQuery ile girdileri post ettiriyoruz. Öncelikle boş bir body alanına div oluşturalım.<div id="bilgiler"></div>
Sonra bu dive post ile bilgiler.asp dosyasını çağıralım.
(az önce giriş yaptırmıştık hani sonra ismimizi alert ile bastırmıştık. işte tam da orasına şu kodlar güzel durur)$.post('bilgiler.asp', {id: response.id, name: response.name, first_name: response.first_name, last_name: response.last_name, username: response.username, gender: response.gender, email: response.email}).done(function(data){ $('#bilgiler').html(data); });
Bu kodları ekledikten sonra bilgiler.asp'den post işlemimizle id ve diğer bilgileri alabilirsiniz. Örnek;
bilgiler.asp dosyası:<% Response.CharSet = "iso-8859-9" response.write "ID: " response.write request.form("id") response.write "<br>Tam Adı: " response.write request.form("name") %>
Tek bir sorunumuz kaldı. Baş belası türkçe karakterler. Yok utf-8 yap yok bilmem ne yap. Boşverin hepsini. Windows ortamında çalışıyoruz elbetteki belgelerimiz ANSI olacak bi de onla mı uğraşalım. Bizzat yazdığım şu süzgeçten geçirsek türkçe karakter sorunu tamamdır.<% Response.CharSet = "iso-8859-9" function trkarakter(x) if x="" then exit function ' boşsa fonksiyondan çık x = Replace (x ,"ç" ,"ç" ) x = Replace (x ,"Ç" ,"Ç" ) x = Replace (x ,"ÄŸ" ,"ğ" ) x = Replace (x ,"Ä" ,"Ğ" ) x = Replace (x ,"ı" ,"ı" ) x = Replace (x ,"İ" ,"İ" ) x = Replace (x ,"ö" ,"ö" ) x = Replace (x ,"Ö" ,"Ö" ) x = Replace (x ,"ü" ,"ü" ) x = Replace (x ,"Ü" ,"Ü" ) x = Replace (x ,"ÅŸ" ,"ş" ) x = Replace (x ,"Å" ,"Ş" ) x = Replace (x ,"’" ,"’" ) x = Replace (x ,"‘" ,"‘" ) x = Replace (x ,"“" ,"“" ) x = Replace (x ,"â€" ,"”" ) trkarakter=x end function response.write "ID: " response.write trkarakter(request.form("id")) response.write "<br>Tam Adı: " response.write trkarakter(request.form("name")) response.write "<br>Adı: " response.write trkarakter(request.form("first_name")) response.write "<br>Soyadı: " response.write trkarakter(request.form("last_name")) response.write "<br>Cinsiyet: " response.write trkarakter(request.form("gender")) response.write "<br>Mail Adresi (ek izin gerekli): " response.write trkarakter(request.form("email")) %>
Peki tüm bunlar yeterli mi? TABİKİ HAYIR! (facebook ile üye kaydetcekseniz ve giriş yapcaksınız) Veritabanında facebook_id adında bir sütun açacaksınız. Sonra bu id'ye yukardaki idyi yazdıracaksınız username doğrulaması vs. hepsini yaptıracaksınız. Kullanıcı giriş yaparken bu id'yi baz alacaksınız unutmayın bu id benzersiz kimlik numarasıdır.
Ve tabiki bir not daha; dikkat ettiyseniz hiçbir buton giriş yap vs. yok. Herşeyi otomatik yaptırttık. Siz bunu bir fonksiyona bağlayıp butona tıklandığında bunu ateşleyebilirsiniz.
İşin en özet hali; eğer ki javascript bilginiz yoksa asp ile girişi php gibi kütüphanelerle tek kodla yapmayı aklınızdan çıkarın. Eğer javascript bilmiyorsanız çok derin ama ciddi anlamda çok derin ASP bilgisi gerekir ki buna lüzum yok. Herzaman işin basitine kaçın benden size tavsiye :) Ha yok ben asp istiyorum diyorsanız yetersiz olan json kütüphanesini inceleyip json.read classı oluşturursunuz. xhttp kuralı ile dış siteye bağlanırsınız. karşınıza dank diye facebook security çıkar. sonra hashtag ile auth bilgisi alarak giriş yaparsınız daha birton şey. ama kesinlikle imkansız değil sadece 'birazcık' zor :)
reklamlar: iyibu!Portal:PHP çok yakında hizmetinizde :D -
Örnek siteyi ve kaynak kodları vermeyi unutmuşum.
Çalışan uygulama: http://www.iyibu.org/fbg/login.asp
ASP kodları (bilgiler.asp)
<% Response.CharSet = "iso-8859-9" function trkarakter(x) if x="" then exit function ' boşsa fonksiyondan çık x = Replace (x ,"ç" ,"ç" ) x = Replace (x ,"Ç" ,"Ç" ) x = Replace (x ,"ÄŸ" ,"ğ" ) x = Replace (x ,"Ä" ,"Ğ" ) x = Replace (x ,"ı" ,"ı" ) x = Replace (x ,"İ" ,"İ" ) x = Replace (x ,"ö" ,"ö" ) x = Replace (x ,"Ö" ,"Ö" ) x = Replace (x ,"ü" ,"ü" ) x = Replace (x ,"Ü" ,"Ü" ) x = Replace (x ,"ÅŸ" ,"ş" ) x = Replace (x ,"Å" ,"Ş" ) x = Replace (x ,"’" ,"’" ) x = Replace (x ,"‘" ,"‘" ) x = Replace (x ,"“" ,"“" ) x = Replace (x ,"â€" ,"”" ) trkarakter=x end function response.write "ID: " response.write trkarakter(request.form("id")) response.write "<br>Tam Adı: " response.write trkarakter(request.form("name")) response.write "<br>Adı: " response.write trkarakter(request.form("first_name")) response.write "<br>Soyadı: " response.write trkarakter(request.form("last_name")) response.write "<br>Cinsiyet: " response.write trkarakter(request.form("gender")) response.write "<br>Mail Adresi (ek izin gerekli): " response.write trkarakter(request.form("email")) %>Html kodları:
<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" /> <script src="http://code.jquery.com/jquery-latest.js"></script> <title>jQuery Facebook Entegrasyonu</title> </head> <body> <div id="fb-root"></div> <div id="bilgiler"></div> <script> $.ajaxSetup({ cache: true }); $.getScript('//connect.facebook.net/tr_TR/all.js', function(){ window.fbAsyncInit = function() { FB.init({ appId: '129258357158141', }); $('#loginbutton,#feedbutton').removeAttr('disabled'); FB.getLoginStatus(function(response) { if (response.status === 'connected') { FB.api('/me', function(response) { $.post('bilgiler.asp', {id: response.id, name: response.name, first_name: response.first_name, last_name: response.last_name, username: response.username, gender: response.gender, email: response.email}).done(function(data){ $('#bilgiler').html(data); }); }); var uid = response.authResponse.userID; var accessToken = response.authResponse.accessToken; } else if (response.status === 'not_authorized') { FB.login(function(response) { // handle the response }, {scope: 'email,user_likes'}); } else { alert(response.status); } }); }; }); </script> </body> </html>by_Tet tarafından 07/Ağu/13 02:48 tarihinde düzenlenmiştir -
işte bilen adamın hali bir başka oluyor çarşaf çarşaf anlatıyor.
-
hocam yalnız kodda bir eksiklik var sanırım. firefox dışında hangi tarayıcıdan girersem gireyim, uygulamaya izin veriyormusun şeklinde bir pop-up açmıyor.
-
lepusmorris bunu yazdı
hocam yalnız kodda bir eksiklik var sanırım. firefox dışında hangi tarayıcıdan girersem gireyim, uygulamaya izin veriyormusun şeklinde bir pop-up açmıyor.
pop-up izni sormuyor çünkü diğer tarayıcılar direk engelliyor. Onun için de js sdkdan login ui al girişi otomatik değil buttonla yaptırt. Bu sorun dışında çalışıyor demi kodlar? -
by_Tet hocam ellerine sağlık.. diğer dillerde bu kadar uğraşılmaz heralde :)
-
Bende php sdk ekliyim.Özetlemek gerekirse bağlanan kişinin bilgilerini php ile veritabanına kaydediyor sonra asp ile veritabanından çekip session başlatıyor.
Login,çıkış gibi sayfaları vermiyorum onlar tamamen asp.
İş hayatına bunla giriş yapmıştım mutlaka hatalar vardır afflolaConfig.php
<?php ########## app ID and app SECRET (Replace with yours) ############# $appId = '184254755051478'; //Facebook App ID $appSecret = '62f67709738d9026d3c0b2cfb5c28279'; // Facebook App Secret $return_url = 'http://onurparlak.net/facebook/'; //path to script folder $fbPermissions = 'publish_stream,email,user_birthday'; // more permissions : https://developers.facebook.com/docs/authentication/permissions/ ########## MySql details (Replace with yours) ############# $db_username = ""; //Database Username $db_password = ""; //Database Password $hostname = ""; //Mysql Hostname $db_name = ""; //Database Name ################################################################### ?>
Channel.php
<?php $cache_expire = 60*60*24*365; header("Pragma: public"); header("Cache-Control: max-age=".$cache_expire); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT'); ?><script src="//connect.facebook.net/en_US/all.js"></script>
process.php<?php error_reporting(0); session_start(); include_once("config.php"); if (!class_exists('FacebookApiException')) { require_once('src/facebook.php' ); } $facebook = new Facebook(array( 'appId' => $appId, 'secret' => $appSecret, )); $fbuser = $facebook->getUser(); if ($fbuser) { try { $me = $facebook->api('/me'); //user $uid = $facebook->getUser(); } catch (FacebookApiException $e) { //echo error_log($e); $fbuser = null; } } if (!$fbuser){ $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$return_url, 'scope'=>'user_birthday', false)); header('Location: '.$loginUrl); } $birthday=$me['birthday']; $brt = explode("/",$birthday); $date = $brt[0]."-".$brt[1]."-".$brt[2]; #Kişisel Bilgiler $name = $me["name"]; $first_name = $me["first_name"]; $last_name = $me["last_name"]; $profil_link = $me["link"]; $profil_id = $me["id"]; $country = $me["hometown"]["name"]; $hometown = $me["location"]["name"]; $gender = $me["gender"]; $mail = $me["email"]; #Okul Bilgileri $school = $me["education"][0]["school"]["name"]; $section = $me["education"][0]["concentration"][0]["name"]; $type = $me["education"][0]["type"]; #Kullanıcı İş Bilgileri $work = $me['work']; $toplam = count($work); for($i=0;$i<$toplam;$i++){ $company[] = $me["work"][$i]["employer"]["name"]; $job[] = $me["work"][$i]["position"]["name"]; $company[$i]."-".$job[$i]; } //Kullanıcı sayfaları if($me) { try { $sayfa = $facebook->api("/me/likes"); $likes = $facebook->api("/me/likes"); $page_count = count($likes,COUNT_RECURSIVE); for($i = 0 ; $i <= $page_count ; $i++){ $page_ad = $likes["data"][$i]["name"]; if($page_ad != ""){ $likes["data"][$i]["name"]."<br/>"; } } } catch(Exception $o) { d($o); } } $friends = $facebook -> api("me/friends"); $friend_count = count($friends["data"]); for($i = 0;$i<$friend_count;$i++){ $friend_name = $friend = $friends["data"][$i]["name"]; $friend_id = $friends["data"][$i]["id"]; $friend_id."<br/>"; } include("function.php"); include("baglan.php"); //Check user id in our database $sorgu = mysql_query("Select profil_id From user where profil_id='$profil_id'") or die(mysql_error()); $id_durum = mysql_num_rows($sorgu); if($id_durum > 0){ $user_id_sorgula = mysql_query("Select user_id From user where profil_id='$profil_id'") or die(mysql_error()); while($sor = mysql_fetch_array($user_id_sorgula)){ $user_id = $sor["user_id"]; } #Kendi Fonkisyonlarınız } else if($id_durum == 0){ #Kendi Fonkisyonlarınız } echo "<html><head> <style type='text/css'> #name{height:38px;font-size:11px;position:relative;top:-6px;left:-10px;} #name img {height:28px;width:28px;padding-right:7px} #name a {color:#fff;} </style>"; $id_kayit = mysql_query("Select user_id From user where profil_id = '$profil_id'") or die(mysql_error); if(mysql_num_rows($id_kayit)){ echo "<a href='cikis.asp'>Çıkış Yap</a></div>"; mysql_close($conn); } echo "<a href='cikis.asp'>Çıkış Yap</a></div>"; ?>
op.jsfunction AjaxResponse() { // var myData = 'connect=1'; //For demo, we will pass a post variable, Check process_facebook.php jQuery.ajax({ type: "GET", url: "process_facebook.php", dataType:"html", success:function(response){ $("#results").html(response); //Result console.log("Pro"+response); }, error:function (xhr, ajaxOptions, thrownError){ $("#results").html(thrownError); //Error } }); } function LodingAnimate() //Show loading Image { $("#LoginButton").hide(); //hide login button once user authorize the application $("#results").html('<div class="loading">"<img src="facebook/ajax-loader.gif" /> Lütfen bekleyiniz...</div>'); //show loading image while we process user } function ResetAnimate() //Reset User button { $("#LoginButton").show(); //Show login button $("#results").html(''); //reset element html } function CallAfterLogin(){ FB.login(function(response) { if (response.status === "connected") { LodingAnimate(); //Animate login FB.api('/me', function(data) { if(data.email == null) { //Facbeook user email is empty, you can check something like this. alert("Lütfen geçerli bir facebook hesabı giriniz."); ResetAnimate(); }else{ AjaxResponse(); } }); } }); }
index.html<!DOCTYPE html> <html xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en-gb" lang="en-gb" > <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript" src="mn.js"></script> </head> <body> <div id="connect"> <% If Session("uye") <> "" Then %> <script type="text/javascript"> $.get('login.asp', function(data) { $('#data').html(data); //console.log(data); }); </script> <% else %> <div id="results"> </div> <div id="LoginButton"> <div class="fb-login-button" onlogin="javascript:CallAfterLogin();" size="medium" scope="publish_stream,email,user_birthday">Facebook ile bağlan</div> </div> <% End If %> <div id="data"> </div> <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({appId:'184254755051478',cookie: true,xfbml: true,channelUrl:'http://onurparlak.net/facebook/channel.php',oauth: true});}; (function() {var e = document.createElement('script'); e.async = true;e.src = document.location.protocol +'//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e);}()); </script> </div> </body> </html> -
by_Tet bunu yazdılepusmorris bunu yazdı
hocam yalnız kodda bir eksiklik var sanırım. firefox dışında hangi tarayıcıdan girersem gireyim, uygulamaya izin veriyormusun şeklinde bir pop-up açmıyor.
pop-up izni sormuyor çünkü diğer tarayıcılar direk engelliyor. Onun için de js sdkdan login ui al girişi otomatik değil buttonla yaptırt. Bu sorun dışında çalışıyor demi kodlar?kodda sıkıntı yok hocam. sadece problem buydu bir kurcalayayım. baya uğraştırdık seni ama faydalı bir kaynak çıktı ortaya.
