2012年8月26日 星期日

[Facebook]我也要用FaceBook帳號來登入我的網站-PartII

※ 事前的準備就是先架好你的伺服器(有個Domain)、申請APP ID、了解基本的Javascript、Html語法
這一篇的重點有兩個,
(1)利用FB.login()來登入FB。
(2)使用FB.api('/me', function(response){}); 這個API來取得使用者的資訊。

有別於上一篇,使用getUserLoginStatus來取得Auth,這邊是用FB.login,取得的資訊應該是差不多的,這點,可以看FB.getLoginStatus 與 FB.login 的介紹。

程式碼應該也算是滿簡潔的,Html部分,放一個Button和Div來做為呼叫和顯示用,
Javascript的部分主要有二個:fblogin()以及fblogout()
不過在下面的範例,我沒有呼叫fblogout(),實際使用時,可以依照個人需求,加在登入->取得使用者資訊 之後自動登出。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://connect.facebook.net/zh_TW/all.js"></script>
    <title>My Facebook Login Page</title>
    <script type="text/javascript">
        // 初始化 & 登入
        function oplogin() {
            FB.init({ appId: '你的app id', status: true, cookie: true, xfbml: true, channelUrl: 'http://www.你的Domain.com.tw/channel.html' }); //appid請去FB申請應用程式
            fblogin();
        }
        function fblogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    //登入成功
                    FB.api('/me', function (response) {
                        var html = '<table>';
                        for (var key in response) {
                            html += ('<tr>' + '<th>' + key + '</th>' + '<td>' + response[key] + '</td>' + '</tr>');
                        }
                        document.getElementById('me').innerHTML = html + '</table>';
                    });
                }
                else {
                    //登入失敗
                    alert("登入失敗。");
                }
            });
        }
        //登出
        function fblogout() {
            FB.getLoginStatus(function (response) {
                if (response.status === 'connected') {
                    FB.logout(function (response) {
                        // user is now logged out
                        document.getElementById('loginform').submit();
                    });
                } else if (response.status === 'not_authorized') {
                    // the user is logged in to Facebook,
                    // but has not authenticated your app
                    FB.logout(function (response) {
                        // user is now logged out
                        alert("請重新登入!");
                    });
                } else {
                    // the user isn't logged in to Facebook.
                    alert("請重新登入!");
                }
            });
        }
    </script>
</head>
<body>
    <input type="button" id="btn2" onclick="javascript:oplogin();return false;" value="取得Facebook登入者資訊(PartII)" />
    <div id="me">
    </div>
</body>
</html>

7 則留言:

  1. 您好~ 您的文章剛好解決了我一個問題...謝謝

    但我有另一個疑問 如果我要請求mail的資訊 是不是只要加上 data-scope="email,user_checkins" 就可以

    變成 input type="button" id="btn2" data-scope="email,user_checkins" onclick="javascript:oplogin();return false;" value="取得Facebook登入者資訊(PartII)"

    只是 試過好像不行

    回覆刪除
  2. 版大我想請教您一個問題
    一般來說我們在用fb登入外部網站時 為了想要將值存入cookie我做了以下動作
    var name = document.cookie='uname='+ response.name;
    但由於中文字串會存成亂碼 所以我又做了以下設定
    var name = document.cookie='uname='+ escape(response.name);

    只是在php 我要取用此cookie時我該怎麼取用

    一般原本php 取用cookie時 是使用
    但取得的是編碼過的值...

    爬過文章後 有說明可以使用unescape函式....但我卻看不懂該如何使用!!!

    還請版大能指點一下

    謝謝

    回覆刪除
  3. 一般原本php 取用cookie時 是使用echo $_COOKIE["uname"]
    但取得的是編碼過的值...卻無法直接這樣使用

    回覆刪除
    回覆
    1. HI
      我寫了一個測試的網頁,是有關於javascrip與PHP去設定或取得cookies值。
      參考資料都是由網路上goo到的
      檔案在此我的DropBox位置

      以下是參考資料:
      javascirpt 對cookies的設定與取值
      php 對cookies的設定與取值

      刪除
  4. 應用程式設置無法接受特定網址。: 應用程式設置無法接受一個或多個特定的網址。網址必須符合網站的網址或畫布網址;或者,網域必須是應用程式網域的副網域之一。

    前輩您好 以照您的方法做 但一直出現上情況 該如何解決 煩請指教

    回覆刪除