UPDATE: Facebook login button ASP.NET a ASP.MVC


Musel som napísať novú autentifikáciu, pretože vo Facebooku to zmenili zo dňa na deň. Takže teraz prinášam UPDATE, v ktorom vieme získať už aj e-mailovú adresu alebo lokalitu užívateľa.

 


Táto verzia prihlásenia cez Facebook je oveľa jednoduchšia a rýchlejšia.

Facebook OAuth

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;

namespace Facebook
{
    public class Hometown
    {
        public string id { get; set; }
        public string name { get; set; }
    }

    public class User
    {
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string name { get; set; }
        public string link { get; set; }
        public string gender { get; set; }
        public string id { get; set; }
        public string picture { get; set; }
        public string email { get; set; }
        public string birthday { get; set; }
        public Hometown hometown { get; set; }
    }

    public class OAuth
    {
        private const string _url = "https://graph.facebook.com/oauth/authorize?type=web_server&client_id={0}&redirect_uri={1}&scope=email,user_birthday,user_hometown";

        private string key = "";
        private string secret = "";

        public OAuth(string key, string secret)
        {
            this.key = Key;
            this.secret = Secret;
        }

        public string UrlRedirect(string urlProcess)
        {
            return string.Format(_url, key, urlProcess);
        }

        public User UserData(string code, string urlProcess)
        {
            string url = "https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}";

            try
            {
                WebRequest request = WebRequest.Create(string.Format(url, key, urlProcess, secret, code));
                WebResponse response = request.GetResponse();
                using (var stream = response.GetResponseStream())
                {
                    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                    using (StreamReader streamReader = new StreamReader(stream, encode))
                    {
                        string accessToken = streamReader.ReadToEnd().Replace("access_token=", "");
                        streamReader.Close();
                        response.Close();
                        using (var wc = new System.Net.WebClient())
                        {
                            var data = wc.DownloadString("https://graph.facebook.com/me?access_token=" + accessToken);

                            User user = null;
                            
                            // var user = data.JsonDeSerialize<User>();
                            // ja používam vlastný deserializer, takže ak nemáš JSON deserializer, sťahuj tu http://json.codeplex.com/

                            if (user != null)
                                user.picture = user.link.Replace("www.", "graph.") + "/picture";

                            return user;
                        }
                    }
                }
            }
            catch
            {
                return null;
            }
        }
    }
}
    

Spracovanie požiadavku

var facebook = new Facebook.OAuth("3049034903490", "34897asdad978q3497a9d7sa97d");
var code = context.Request["code"];

// ak je code=empty tak redirectujeme na facebook       
if (string.IsNullOrEmpty(code))
{
    Response.Redirect(facebook.UrlRedirect("http://mojserver.sk/login/facebook/"));
}
else
{
    // facebook nám vrátil údaje   
    var user = facebook.UserData(code, "http://mojserver.sk/login/facebook/");
    if (user != null)
    {
        Response.Write(user.email);
    }
}    
    

Použitie na stránke

<a href="http://mojserver.sk/login/facebook/">Prihlásiť sa cez Facebook</a>
    

 
Peter Širka
pred 4 mesiacmi, 18.01.2012

Diskusia (3)

1
Diky, hladal som dlhsie nieco relevantne, a najst to este prehladne a svk, super ...
 
frno, pred 2 mesiacmi
2
stabilne ma facebook presvisdča o zmene hesla, ktoré mám stabilne uložené a nemôžem sa prihlásiľ, potom postupujem ako kážu a zablokujú ma za podozrenie o nekalom vstupe na môj účet, hoci odpoviem a potvrdím, nevieš ako sa dostať na koreň veci skôr ako rozbijem počítač?
 
Juraj Chlebík Brezina, pred 24 dňami
3
@Juraj Chlebík Brezina ... s týmto ti nepomôžem, mrzí ma to.
 
Peter Širka, pred 24 dňami

Nevyplnil si všetky povinné políčka alebo si ich vyplnil chybne. Neojebávaj môj systém.
Skontroluj či si zadal meno a komentár.
Tvoj komentár bol úspešne odoslaný.
Ďakujem.

Meno:

Komentár:

Ďalšie blogy
Dynamické vytvorenie subdomény v ASP.NET / MVC
Dynamické vytvorenie subdomény v ASP.NET / MVC
Bolo to už dávno, čo nás na firme žralo, že naša konkurencia vedela riešiť dynamicky vytvárenie subdomén alebo domén 3 úrovne. Google ich lepšie indexoval (tak sa nám to zdalo) a riešenie prišlo až v IIS 7.
Prečítať 9
ASP.MVC - Session troška inak a prihlásený užívateľ
ASP.MVC - Session troška inak a prihlásený užívateľ
V dávnej minulosti som používal vstavaného Session providera. Raz mi praskli nervy a rozhodol som sa experimentovať. Stálo to za to. Ten kto neexperimentuje ten nemá a ja experimentujem len pre moje potreby.
Prečítať 21
C# (2) funkcie na ktoré som skutočne pyšný
C# (2) funkcie na ktoré som skutočne pyšný
Každý kóder určite vymyslel nejaký kód, na ktorý je pyšný. Ja som pyšný na 2 funkcie, ktoré používam v našich projektoch denno-denne. Niekomu sa budú zdať smiešne, no pre mňa sú jedinečné.
Prečítať 14
ASP.MVC, ASP.NET Facebook like count
ASP.MVC, ASP.NET Facebook like count
Jednoduchý kód na zistenie počtu like-kov z Facebooku na zadanú URL adresu. Je možné získať ešte ďalšie zaujímavé počty, napríklad počet zdielaní, počet komentárov, atď..
Prečítať
jQuery webcam plugin / ASP.NET, ASP.MVC
jQuery webcam plugin / ASP.NET, ASP.MVC
Pre náš webový projekt som použil jQuery webcam plugin, ktorý spustí Flash animáciu a odfotí užívateľa. Následne spracovaný obrázok odošle na server. Problém je, že odosiela data po pixeli.
Prečítať