最近遇到一個很趕流行的需求,直接可以讓會員使用他們的 Facebook 帳號登入,透過授權直接取得該會員的資料,而不需要另行註冊,這是時下網站很愛的一個功能,你的網站沒有這個功能就不算跟得上時代,所以不管怎樣都要弄一個來帥一下,不過這個東西的確可以幫你的網站降低非常多的召收會員的門檻。
怎麼與你的會員機制接在一起呢 ? 其實很簡單,我們只是把「驗證」這個步驟丟到 Facebook 去處理,也就是輸入帳號、密碼我們不做了(好像在講廢話)。而這次我不打算自已刻一個會員機制,我選擇了 .Net 2.0 時所提供的「網頁安全性管理 API」,而我用到了三個 API:
- Role API : 幫你的網站使用者分類群組 。
- Memebership API : 記錄驗證使用者時需要的資訊。
- Profile API : 一些非必須的資料,在這裏我是拿來記錄會員在 Facebook 中的基本資料。
ps.以下所有在程式碼中看到的 Profile,都是登入情況下使用的。匿名 Profile 又是另外一件事了。
不管你用以上哪個 API ,首先使用.Net Framework提供的 aspnet_regsql 工具產生資料庫要用的表格。(aspnet_regsql 用法可以參考 這裏)
aspnet_regsql -E -S JEN-PC\SQLEXPRESS -A mrp -d mydatabase結果:
「 Web Site 專案」的實作方式如下:
Web.Config
ASPX Page , 會根據 web.config 自動產生強型別的 Profile。
protected void Page_Load(object sender, EventArgs e)
{
Profile.first_name = "my first name";
Profile.last_name = "my last name";
Profile.link = "my link";
Profile.locale = "my locale";
Profile.id = "my id";
Profile.Save();
}
但是,在「非 WebSite」的專案中則無法這樣使用,例如 ASP.NET MVC Project ,實作方式就不一樣。
首先,把 Web.Config 中 profile 區段的 properties 拿掉。
聰明的你注意到了最後面那個 GetProfile(string username) 的方法,呼叫了父類別的 Create(),在這裏你可以為剛加入的 Member 建立新的 Profile ,或者取得舊會員已存在的Profile。以下是一個簡單的範例。
最後這些 Profile 資料都會存在資料庫 aspnet_Profile 的表格中囉。
其實這個 API 很好用, 而這一 PO 似乎還沒跟 Facebook Graph API 扯上關係,就下一篇吧。
下一篇:Facebook Graph API 與 .Net (二) - 還沒想到…
aspnet_regsql
設定SQL Server 儲存ASP.NET Session State (Cookieleses)
首先,把 Web.Config 中 profile 區段的 properties 拿掉。
第二,定義一個繼承自 ProfileBase 的類別,包含一些儲存會員資訊時需要用到的屬性,以下程式碼就是定義用來儲存Facebook 個人資料的屬性。
public class UserProfile : ProfileBase
{
public virtual string id
{
get
{
return ((string)(this.GetPropertyValue("id")));
}
set
{
this.SetPropertyValue("id", value);
}
}
public virtual string first_name
{
get
{
return ((string)(this.GetPropertyValue("first_name")));
}
set
{
this.SetPropertyValue("first_name", value);
}
}
// ...省略
public virtual UserProfile GetProfile(string username)
{
return ((UserProfile)(ProfileBase.Create(username)));
}
}
聰明的你注意到了最後面那個 GetProfile(string username) 的方法,呼叫了父類別的 Create(),在這裏你可以為剛加入的 Member 建立新的 Profile ,或者取得舊會員已存在的Profile。以下是一個簡單的範例。
// 從 facebook 取得會員資料
dynamic fbUser = facebookService.GetUserData(access_token.access_token);
if (fbUser != null)
{
if (fbUser.verified)
{
//建立 (或取得) 會員
MembershipUser NewMember = Membership.GetUser(fbUser.email) ?? Membership.CreateUser(fbUser.email, "facebook");
//取得 ticket 然後登入
FormsAuthentication.SetAuthCookie(NewMember.UserName, true);
//建立 (或取得) 該會員的 Profile,然後更新.
UserProfile profile = (UserProfile)UserProfile.Create(NewMember.UserName,true);
profile.id = fbUser.id;
profile.first_name = fbUser.first_name;
profile.last_name = fbUser.last_name;
profile.locale = fbUser.locale;
profile.verified = fbUser.verified;
profile.Save(); //最後更新到Database
}
}
最後這些 Profile 資料都會存在資料庫 aspnet_Profile 的表格中囉。
其實這個 API 很好用, 而這一 PO 似乎還沒跟 Facebook Graph API 扯上關係,就下一篇吧。
下一篇:Facebook Graph API 與 .Net (二) - 還沒想到…
aspnet_regsql
設定SQL Server 儲存ASP.NET Session State (Cookieleses)


0 意見:
張貼意見