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
